home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 32 / Amiga Format AFCD32 (Nov 1998, Issue 117).iso / -seriously_amiga- / programming / other / hrtmon / src / assemble.s < prev    next >
Text File  |  1998-08-10  |  53KB  |  2,421 lines

  1.  
  2. ;HRTmon Amiga system monitor
  3. ;Copyright (C) 1991-1998 Alain Malek Alain.Malek@cryogen.com
  4. ;
  5. ;This program is free software; you can redistribute it and/or
  6. ;modify it under the terms of the GNU General Public License
  7. ;as published by the Free Software Foundation; either version 2
  8. ;of the License, or (at your option) any later version.
  9. ;
  10. ;This program is distributed in the hope that it will be useful,
  11. ;but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. ;GNU General Public License for more details.
  14. ;
  15. ;You can find the full GNU GPL online at: http://www.gnu.org
  16.  
  17.  
  18. ;assembler from Beermon modified for HRTmon
  19. ;68000-68040/FPU/MMU
  20.  
  21. ;-> a0=ptr on string
  22. ;-> a1=address where to assemble
  23. ;<- d0: 0=ok -1=error
  24. ;<- opcode in op68000 & len-1.w in oplen
  25.  
  26. ;oplen        dc.w 0            ;nb word for instr.-1
  27. ;op68000    dc.w 0,0,0,0,0        ;assembled instr. here !!
  28.  
  29. ;s        * only for test *
  30. ;        lea.l    linebufBMON,a0
  31. ;        lea.l    $1f0000,a1
  32. ;        bsr.w    assemble
  33. ;        rts
  34. ;linebufBMON    dc.b "lea ($1f0020,pc),a0"
  35. ;        dcb.b 80,0
  36. ;lineeofBMON    dc.b 0
  37. ;        even
  38.  
  39.     ifnd baseBMON
  40. baseBMON
  41.     endc
  42.  
  43.         ifnd s67BMON
  44. s67BMON =$0000
  45. s6BMON  =$0100
  46. s8BMON  =$0200
  47. stabBMON=$0300
  48. snopBMON=$0400
  49. s9a_BMON=$0500    ;68020 cas
  50. s9aBMON =$0600    ;68020 chk2,cmp2
  51.         endc
  52.  
  53. assemble:    movem.l    d1-d7/a0-a6,-(a7)
  54.  
  55.         lea.l    baseBMON,a6
  56.  
  57.         move.l    a1,paraBMON
  58.  
  59.         move.l    a0,a2
  60. .seek        tst.b    (a2)+
  61.         bne.b    .seek        ;seek end of line
  62.         subq.l    #1,a2
  63.         move.l    a2,lineendBMON
  64.  
  65.         move.l a0,a5        ;cmdadr!
  66. nn3BMON:        cmp.l lineendBMON,a0
  67.         bhi.b nn4BMON
  68.         move.b (a0)+,d0
  69.         cmp.b #"Z",d0
  70.         bhi.b nn3BMON
  71.         cmp.b #"A",d0
  72.         bcs.b nn3BMON
  73.         bset #5,d0            ;go lower case
  74.         move.b d0,-1(a0)
  75.         bra.b nn3BMON
  76. nn4BMON:        lea instrBMON(pc),a4
  77. nn7BMON:
  78. ;    btst #0,paraBMON+3            ;test if even address ?
  79. ;    bne.b nassq
  80. ;    cmp.b #"-",(a5)    ;line?
  81. ;    beq.w ignline
  82.         move.l a5,a0
  83.         lea 6(a4),a1
  84. nn6BMON:        move.b (a1),d0
  85.         bclr #7,d0
  86.         cmp.b (a0)+,d0
  87.         bne.w nn5BMON
  88.         btst #7,(a1)+
  89.         beq.b nn6BMON
  90.  
  91.         lea op68000-2,a1
  92.         clr.l lginstrBMON    ;0:2byte instrBMON,2:4byte (mulx.l...)
  93.         clr.w (a1)+        ;oplen!
  94.         clr.w (a1)
  95.         move.w 4(a4),d0        ;info
  96.         and.w #$700,d0
  97.         cmp.w #snopBMON,d0
  98.         beq.w nnsnopBMON
  99.         cmp.w #stabBMON,d0
  100.                 ;bne.b nnstabBMON
  101.         beq.w nn9BMON
  102. nnstabBMON:        cmp.b #".",(a0)+
  103.         bne.w nn5BMON
  104.         cmp.w #s67BMON,d0
  105.         bne.b nns67BMON
  106.         sf imsizeBMON        ;%00
  107.         cmp.b #"b",(a0)+    ;op68000:0
  108.         beq.w nn9BMON
  109.         addq.b #1,imsizeBMON    ;%01
  110.         move.w #%01000000,(a1)
  111.         cmp.b #"w",-1(a0)
  112.         beq.w nn9BMON
  113.         addq.b #1,imsizeBMON    ;%10
  114.         move.w #%10000000,(a1)
  115.         cmp.b #"l",-1(a0)
  116.         beq.w nn9BMON    
  117. nns67BMON:        cmp.w #s9a_BMON,d0            ;68020 cas
  118.         bne.b nns9a_BMON
  119.         sf imsizeBMON        ;%00
  120.         move.w #%01000000000,(a1)    ;68020
  121.         cmp.b #"b",(a0)+    ;op68000:0
  122.         beq.w nn9BMON
  123.         addq.b #1,imsizeBMON    ;%01
  124.         move.w #%10000000000,(a1)
  125.         cmp.b #"w",-1(a0)
  126.         beq.w nn9BMON
  127.         addq.b #1,imsizeBMON    ;%10
  128.         move.w #%11000000000,(a1)
  129.         cmp.b #"l",-1(a0)
  130.         beq.w nn9BMON    
  131. nns9a_BMON:        cmp.w #s9aBMON,d0            ;68020 chk2,cmp2
  132.         bne.b nns9aBMON
  133.         sf imsizeBMON    ;%00
  134.         cmp.b #"b",(a0)+    ;op68000:0
  135.         beq.w nn9BMON
  136.         addq.b #1,imsizeBMON    ;%01
  137.         move.w #%01000000000,(a1)
  138.         cmp.b #"w",-1(a0)
  139.         beq.w nn9BMON
  140.         addq.b #1,imsizeBMON    ;%10
  141.         move.w #%10000000000,(a1)
  142.         cmp.b #"l",-1(a0)
  143.         beq.b nn9BMON    
  144. nns9aBMON:        cmp.w #s6BMON,d0
  145.         bne.b nns6BMON
  146.         move.b #%01,imsizeBMON
  147.         cmp.b #"w",(a0)+
  148.         beq.b nn9BMON
  149.         addq.b #1,imsizeBMON    ;%10
  150.         move.w #%1000000,(a1)
  151.         cmp.b #"l",-1(a0)
  152.         beq.b nn9BMON
  153. nns6BMON:        cmp.w #s8BMON,d0
  154.         bne.b nn5BMON        ;ill instrtab or cmd
  155.         move.b #%01,imsizeBMON
  156.         cmp.b #"w",(a0)+
  157.         beq.b nn9BMON
  158.         addq.b #1,imsizeBMON    ;%10
  159.         move.w #%100000000,(a1)
  160.         cmp.b #"l",-1(a0)
  161.         bne.b nn5BMON
  162. nn9BMON:        cmp.b #" ",(a0)
  163.         bne.b nn5BMON
  164. nn10BMON:        addq.w #1,a0
  165.         cmp.l lineendBMON,a0
  166.         bhi.b nn5BMON
  167.         cmp.b #" ",(a0)
  168.         beq.b nn10BMON
  169.  
  170. nnsnopBMON:        st d7
  171.         move.l a0,a3
  172.         move.w 4(a4),d0
  173.         ext.w d0             ;no a4,a5
  174.         add.w d0,d0
  175.         lea assoffsBMON(pc),a0
  176.         move.w (a0,d0.w),d0
  177.         lea assubsBMON(pc),a0
  178.  
  179.         jsr (a0,d0.w)    ;a4:instrtabentry,a5:cmdtxt,a3:cnttxt
  180.             ;a6:notmodify!!
  181.         tst.b d7    
  182.         bne.b nn8BMON
  183. nn5BMON:        sf d7
  184.         tst.l (a4)
  185.         beq.b nretryBMON        ;unknown
  186.         lea 14(a4),a4
  187.         bra.w nn7BMON
  188. nn8BMON:
  189.  
  190.         lea op68000,a0
  191.         move.w (a0),d1
  192.         or.w 2(a4),d1
  193.         move.w d1,(a0)
  194.  
  195.         moveq    #0,d0        ;ok!
  196. ass_outBMON        movem.l    (a7)+,d1-d7/a0-a6
  197.         rts
  198.  
  199. nretryBMON        moveq    #-1,d0        ;unknown instruction
  200.         bra.b    ass_outBMON
  201.  
  202. ;---------------------------------------------------------------
  203.         ifnd longtoaBMON
  204.  
  205. longtoaBMON:    movem.l d0-d2,-(a7)
  206.         moveq #8-1,d2
  207. lta0BMON:        rol.l #4,d0
  208.  
  209.         moveq #$0f,d1
  210.         and.w d0,d1
  211.         move.b l2asciiBMON(pc,d1.w),(a0)+
  212.         dbf d2,lta0BMON
  213.         movem.l (a7)+,d0-d2
  214.         rts
  215. l2asciiBMON:dc.b "0123456789abcdef"
  216. ;---------------------------------------------------------------
  217. atolong_BMON:    cmp.b #"$",(a3)
  218.         bne.b atolongBMON
  219.         addq.w #1,a3
  220. atolongBMON:    moveq #8-1,d2
  221.         bra.b atob2BMON
  222. atoword_BMON:    cmp.b #"$",(a3)
  223.         bne.b atowordBMON
  224.         addq.w #1,a3
  225. atowordBMON:    moveq #4-1,d2
  226.         bra.b atob2BMON
  227. atobyte_BMON:    cmp.b #"$",(a3)
  228.         bne.b atobyteBMON
  229.         addq.w #1,a3
  230. atobyteBMON:    moveq #2-1,d2
  231. atob2BMON:        moveq #0,d0
  232. atob1BMON:        move.b (a3),d1
  233.         cmp.b #"f",d1
  234.         bhi.b atob3BMON
  235.         sub.b #"0",d1
  236.         bcs.b atob3BMON
  237.         cmp.b #9,d1
  238.         bls.b atob0BMON
  239.         cmp.b #"a"-"0",d1
  240.         bcs.b atob3BMON
  241.         sub.b #"a"-"0"-10,d1
  242. atob0BMON:        lsl.l #4,d0
  243.         or.b d1,d0
  244.         addq.w #1,a3
  245.         dbf d2,atob1BMON
  246. atob3BMON:        tst.l d0
  247.         rts
  248. atodnibBMON:moveq #0,d0            ;0-99
  249.     move.b (a3),d1
  250.     sub.b #"0",d1
  251.     bcs.b atdnb0BMON
  252.     cmp.b #9,d1
  253.     bhi.b atdnb0BMON
  254.     addq.w #1,a3
  255.     move.b d1,d0
  256.     move.b (a3),d1
  257.     sub.b #"0",d1
  258.     bcs.b atdnb0BMON
  259.     cmp.b #9,d1
  260.     bhi.b atdnb0BMON
  261.     addq.w #1,a3
  262.     mulu #10,d0
  263.     add.b d1,d0
  264. atdnb0BMON:    tst.b d0
  265.     rts
  266. atodlongBMON:
  267.     moveq #0,d0
  268.     moveq #0,d1
  269.     moveq #10-1,d2
  270. atol1BMON:    move.b (a3),d1
  271.     sub.b #"0",d1
  272.     bcs.b atodl0BMON
  273.     cmp.b #9,d1
  274.     bhi.b atodl0BMON
  275.     addq.w #1,a3
  276.     add.l d0,d0        ;*2
  277.     move.l d0,-(a7)
  278.     lsl.l #2,d0        ;*2*4
  279.     add.l (a7)+,d0
  280.     add.l d1,d0
  281.     dbf d2,atol1BMON
  282. atodl0BMON:    rts
  283.  
  284.         endc
  285. ;---------------------------------------------------------------
  286. skipspcBMON:cmp.b #" ",(a0)
  287.     bne.b fnspc0BMON
  288.     addq.w #1,a0
  289.     bra.b skipspcBMON
  290. findspcBMON:cmp.b #" ",(a0)
  291.     beq.b fnspc0BMON
  292.     addq.w #1,a0
  293.     bra.b findspcBMON
  294. fnspc0BMON:    cmp.l lineendBMON,a0    ;bhi.b eol
  295.     rts
  296. ;---------------------------------------------------------------
  297.     ifnd instrBMON
  298.  
  299. instrBMON:    dc.w $ffff,$4afc,snopBMON!xnoopsBMON
  300.     dc.b "illega","l"+128,0
  301.     dc.w $ffff,$4e70,snopBMON!xnoopsBMON
  302.     dc.b "rese","t"+128,0,0,0
  303.     dc.w $ffff,$4e71,snopBMON!xnoopsBMON
  304.     dc.b "no","p"+128,0,0,0,0,0
  305.     dc.w $ffff,$4e73,snopBMON!xnoopsBMON
  306.     dc.b "rt","e"+128,0,0,0,0,0
  307.     dc.w $ffff,$4e75,snopBMON!xnoopsBMON
  308.     dc.b "rt","s"+128,0,0,0,0,0
  309.     dc.w $ffff,$4e77,snopBMON!xnoopsBMON
  310.     dc.b "rt","r"+128,0,0,0,0,0
  311.     dc.w $ffff,$4afa,snopBMON!xnoopsBMON        ;cpu32 only
  312.     dc.b "bgn","d"+128,0,0,0,0
  313.  
  314.     dc.w $ffc0,$f200,snopBMON!xfpuBMON        ;68881
  315.     dc.b "f"+128,0,0,0,0,0,0,0
  316.     dc.w $ffc0,$f200,stabBMON!xfmovelBMON        ;68881
  317.     dc.b "fmove.","l"+128,0
  318.     dc.w $ffc0,$f200,stabBMON!xfmovemlBMON        ;68881
  319.     dc.b "fmovem.","l"+128
  320.     dc.w $ffc0,$f200,stabBMON!xfmovemxBMON        ;68881
  321.     dc.b "fmovem.","x"+128
  322.     dc.w $ffff,$f200,stabBMON!xfmovecrBMON        ;68881
  323.     dc.b "fmovec","r"+128,0
  324.     dc.w $ffff,$f280,snopBMON!xfnopBMON        ;68881
  325.     dc.b "fno","p"+128,0,0,0,0
  326.     dc.w $ffff,$f510,snopBMON!xnoopsBMON        ;68040 only!
  327.     dc.b "pflusha","n"+128
  328.     dc.w $ffff,$f518,snopBMON!xnoopsBMON        ;68040 only!
  329.     dc.b "pflusha","!"+128
  330.     dc.w $ffff,$f000,snopBMON!xpflushaBMON        ;68020 order!
  331.     dc.b "pflush","a"+128,0
  332.     dc.w $ffff,$f000,stabBMON!xpflushsBMON        ;68851 only order!
  333.     dc.b "pflush","s"+128,0
  334.     dc.w $ffc0,$f000,stabBMON!xpflushrBMON        ;68851 only order!
  335.     dc.b "pflush","r"+128,0
  336.     dc.w $fff8,$f500,stabBMON!xpflush40BMON        ;68040 only!
  337.     dc.b "pflush","n"+128,0
  338.     dc.w $fff8,$f508,stabBMON!xpflush40BMON        ;68040 only!
  339.     dc.b "pflus","h"+128,0,0
  340.     dc.w $fff8,$f548,stabBMON!xpflush40BMON        ;68040 only!
  341.     dc.b "ptest","w"+128,0,0
  342.     dc.w $fff8,$f568,stabBMON!xpflush40BMON        ;68040 only!
  343.     dc.b "ptest","r"+128,0,0
  344.  
  345.     dc.w $ffff,$f000,stabBMON!xpflushBMON        ;68020 order!
  346.     dc.b "pflus","h"+128,0,0
  347.     dc.w $ffc0,$f000,stabBMON!xpvalidBMON        ;68851 only
  348.     dc.b "pvali","d"+128,0,0
  349.         
  350.     dc.w $ffff,$003c,stabBMON!xiwordtoccrBMON
  351.     dc.b "or","i"+128,0,0,0,0,0
  352.     dc.w $ffff,$023c,stabBMON!xiwordtoccrBMON
  353.     dc.b "and","i"+128,0,0,0,0
  354.     dc.w $ffff,$0a3c,stabBMON!xiwordtoccrBMON
  355.     dc.b "eor","i"+128,0,0,0,0
  356.  
  357.     dc.w $ffff,$007c,stabBMON!xiwordtosrBMON
  358.     dc.b "or","i"+128,0,0,0,0,0
  359.     dc.w $ffff,$027c,stabBMON!xiwordtosrBMON
  360.     dc.b "and","i"+128,0,0,0,0
  361.     dc.w $ffff,$0a7c,stabBMON!xiwordtosrBMON
  362.     dc.b "eor","i"+128,0,0,0,0
  363.  
  364.     dc.w $f1f8,$c140,stabBMON!xdx9btodx02BMON
  365.     dc.b "ex","g"+128,0,0,0,0,0
  366.     dc.w $f1f8,$c148,stabBMON!xax9btoax02BMON
  367.     dc.b "ex","g"+128,0,0,0,0,0
  368.     dc.w $f1f8,$c188,stabBMON!xdx9btoax02BMON
  369.     dc.b "ex","g"+128,0,0,0,0,0
  370.  
  371.     dc.w $fff8,$4e58,stabBMON!xiunlkBMON
  372.     dc.b "unl","k"+128,0,0,0,0
  373.     dc.w $fff8,$4808,stabBMON!xilinklgBMON        ;68020
  374.     dc.b "link.","l"+128,0,0
  375.     dc.w $fff8,$4e50,stabBMON!xilinkBMON
  376.     dc.b "lin","k"+128,0,0,0,0
  377.  
  378.     dc.w $fff8,$4848,stabBMON!xbkptBMON        ;68020
  379.     dc.b "bkp","t"+128,0,0,0,0
  380.  
  381.     dc.w $f1f0,$8140,stabBMON!xpackBMON        ;68020
  382.     dc.b "pac","k"+128,0,0,0,0
  383.     dc.w $f1f0,$8180,stabBMON!xpackBMON        ;68020
  384.     dc.b "unp","k"+128,0,0,0,0
  385.  
  386.     dc.w $fff0,$4e40,stabBMON!xitrapBMON
  387.     dc.b "tra","p"+128,0,0,0,0
  388.  
  389.     dc.w $f100,$7000,stabBMON!ximoveqBMON
  390.     dc.b "move","q"+128,0,0,0
  391.  
  392.     dc.w $ffff,$f800,stabBMON!xlpstopBMON        ;cpu32 only
  393.     dc.b "lpsto","p"+128,0,0    
  394.     dc.w $ffff,$4e72,stabBMON!xiwordBMON
  395.     dc.b "sto","p"+128,0,0,0,0
  396.     dc.w $ffff,$4e74,stabBMON!xiwordBMON        ;68010
  397.     dc.b "rt","d"+128,0,0,0,0,0
  398.  
  399.     dc.w $fdff,$0cfc,snopBMON!xcas2BMON        ;68020
  400.     dc.b "cas2","."+128,0,0,0
  401.  
  402.     dc.w $fff8,$4840,stabBMON!xsrcdx02BMON
  403.     dc.b "swa","p"+128,0,0,0,0
  404.     dc.w $fff8,$49c0,stabBMON!xsrcdx02BMON        ;68020
  405.     dc.b "ext","b"+128,0,0,0,0
  406.     dc.w $ffb8,$4880,s6BMON!xsrcdx02BMON
  407.     dc.b "ex","t"+128,0,0,0,0,0
  408.  
  409.     dc.w $fff0,$06c0,stabBMON!xrx03BMON        ;68020
  410.     dc.b "rt","m"+128,0,0,0,0,0
  411. ;????
  412.     dc.w $fffe,$f07a,snopBMON!xpccodesizeBMON    ;68851 only order!
  413.     dc.b "ptra","p"+128,0,0,0
  414.     dc.w $ffff,$f07c,snopBMON!xpccodeBMON        ;68851 only order!
  415.     dc.b "ptra","p"+128,0,0,0
  416.     dc.w $fffe,$f27a,snopBMON!xfccodesizeBMON    ;68881 order!
  417.     dc.b "ftra","p"+128,0,0,0
  418.     dc.w $ffff,$f27c,snopBMON!xfccodeBMON        ;68881 order!
  419.     dc.b "ftra","p"+128,0,0,0
  420.     dc.w $f0fe,$50fa,snopBMON!xccodesizeBMON    ;68020 order!
  421.     dc.b "tra","p"+128,0,0,0,0
  422.     dc.w $f0ff,$50fc,snopBMON!xccodeBMON        ;68020 order!
  423.     dc.b "tra","p"+128,0,0,0,0
  424.     dc.w $ffff,$4e76,snopBMON!xnoopsBMON        ;order!
  425.     dc.b "trap","v"+128,0,0,0
  426. ;????
  427.     dc.w $ff3f,$f418,stabBMON!xidbcacBMON        ;68040
  428.     dc.b "cinv","a"+128,0,0,0
  429.     dc.w $ff38,$f408,stabBMON!xidbindBMON        ;68040
  430.     dc.b "cinv","l"+128,0,0,0
  431.     dc.w $ff38,$f410,stabBMON!xidbindBMON        ;68040
  432.     dc.b "cinv","p"+128,0,0,0
  433.     dc.w $ff3f,$f438,stabBMON!xidbcacBMON        ;68040
  434.     dc.b "cpush","a"+128,0,0
  435.     dc.w $ff38,$f428,stabBMON!xidbindBMON        ;68040
  436.     dc.b "cpush","l"+128,0,0
  437.     dc.w $ff38,$f430,stabBMON!xidbindBMON        ;68040
  438.     dc.b "cpush","p"+128,0,0
  439.     dc.w $fff8,$f620,stabBMON!xmov16BMON        ;68040 order!
  440.     dc.b "move1","6"+128,0,0
  441.     dc.w $ffe0,$f600,stabBMON!xmov162BMON        ;68040
  442.     dc.b "move1","6"+128,0,0
  443.  
  444.     dc.w $f138,$b108,s67BMON!xicmpmBMON
  445.     dc.b "cmp","m"+128,0,0,0,0
  446.  
  447.     dc.w $f1f0,$c100,stabBMON!xxbcdBMON
  448.     dc.b "abc","d"+128,0,0,0,0
  449.     dc.w $f1f0,$8100,stabBMON!xxbcdBMON
  450.     dc.b "sbc","d"+128,0,0,0,0
  451.  
  452.     dc.w $f130,$d100,s67BMON!xsize67adsbxBMON
  453.     dc.b "add","x"+128,0,0,0,0
  454.     dc.w $f130,$9100,s67BMON!xsize67adsbxBMON
  455.     dc.b "sub","x"+128,0,0,0,0
  456.  
  457.     dc.w $ffc0,$f000,stabBMON!xpmovefdBMON        ;68030 only
  458.     dc.b "pmovef","d"+128,0
  459.     dc.w $ffc0,$f000,stabBMON!xpmoveBMON        ;68020
  460.     dc.b "pmov","e"+128,0,0,0
  461.     dc.w $ffc0,$f000,snopBMON!xploadBMON        ;68020
  462.     dc.b "ploa","d"+128,0,0,0
  463.     dc.w $ffc0,$f000,snopBMON!xptestBMON        ;68020
  464.     dc.b "ptes","t"+128,0,0,0
  465.  
  466.     dc.w $ffc0,$e8c0,stabBMON!xbfieldBMON        ;68020
  467.     dc.b "bfts","t"+128,0,0,0
  468.     dc.w $ffc0,$eac0,stabBMON!xbfieldBMON        ;68020
  469.     dc.b "bfch","g"+128,0,0,0
  470.     dc.w $ffc0,$ecc0,stabBMON!xbfieldBMON        ;68020
  471.     dc.b "bfcl","r"+128,0,0,0
  472.     dc.w $ffc0,$eec0,stabBMON!xbfieldBMON        ;68020
  473.     dc.b "bfse","t"+128,0,0,0
  474.     dc.w $ffc0,$e9c0,stabBMON!xbfieldtodxBMON    ;68020
  475.     dc.b "bfext","u"+128,0,0
  476.     dc.w $ffc0,$ebc0,stabBMON!xbfieldtodxBMON    ;68020
  477.     dc.b "bfext","s"+128,0,0
  478.     dc.w $ffc0,$edc0,stabBMON!xbfieldtodxBMON    ;68020
  479.     dc.b "bfff","o"+128,0,0,0
  480.     dc.w $ffc0,$efc0,stabBMON!xdxtobfieldBMON    ;68020
  481.     dc.b "bfin","s"+128,0,0,0
  482.  
  483.     dc.w $ffc0,$06c0,stabBMON!xcallmBMON        ;68020
  484.     dc.b "call","m"+128,0,0,0
  485.     
  486.     dc.w $ffc0,$40c0,stabBMON!xsrtoeaBMON
  487.     dc.b "mov","e"+128,0,0,0,0
  488.     dc.w $ffc0,$42c0,stabBMON!xccrtoeaBMON        ;68010
  489.     dc.b "mov","e"+128,0,0,0,0
  490.     dc.w $ffc0,$44c0,stabBMON!xeatoccrBMON
  491.     dc.b "mov","e"+128,0,0,0,0
  492.     dc.w $ffc0,$46c0,stabBMON!xeatosrBMON
  493.     dc.b "mov","e"+128,0,0,0,0
  494.  
  495.     dc.w $fff0,$4e60,stabBMON!ximuspBMON
  496.     dc.b "mov","e"+128,0,0,0,0
  497.  
  498.     dc.w $fffe,$4e7a,stabBMON!ximovecBMON        ;68010
  499.     dc.b "move","c"+128,0,0,0
  500.  
  501.     dc.w $fb80,$4880,s6BMON!ximovemBMON
  502.     dc.b "move","m"+128,0,0,0
  503.  
  504.     dc.w $f138,$0108,s6BMON!xsize6movepBMON
  505.     dc.b "move","p"+128,0,0,0
  506.  
  507.     dc.w $ffc0,$f800,snopBMON!xtblBMON        ;cpu32 only
  508.     dc.b "tb","l"+128,0,0,0,0,0
  509.  
  510.     dc.w $f1c0,$41c0,stabBMON!xeatoaxBMON
  511.     dc.b "le","a"+128,0,0,0,0,0
  512.  
  513.     dc.w $ffff,$60ff,stabBMON!xlongbxxBMON        ;68020
  514.     dc.b "bra.","l"+128,0,0,0
  515.     dc.w $ffff,$61ff,stabBMON!xlongbxxBMON        ;68020
  516.     dc.b "bsr.","l"+128,0,0,0
  517.     dc.w $ffff,$6000,stabBMON!xwordbxxBMON
  518.     dc.b "bra.","w"+128,0,0,0
  519.     dc.w $ffff,$6100,stabBMON!xwordbxxBMON
  520.     dc.b "bsr.","w"+128,0,0,0
  521.     dc.w $ff00,$6000,stabBMON!xshortbxxBMON        ;order !
  522.     dc.b "bra.","b"+128,0,0,0
  523.     dc.w $ff00,$6000,stabBMON!xshortbxxBMON        ;order !
  524.     dc.b "bra.","s"+128,0,0,0                ;clone
  525.     dc.w $ff00,$6100,stabBMON!xshortbxxBMON
  526.     dc.b "bsr.","b"+128,0,0,0
  527.     dc.w $ff00,$6100,stabBMON!xshortbxxBMON
  528.     dc.b "bsr.","s"+128,0,0,0                ;clone
  529.     dc.w $ffb0,$f080,snopBMON!xbrapccBMON        ;68851 only
  530.     dc.b "p","b"+128,0,0,0,0,0,0
  531.     dc.w $ffa0,$f280,snopBMON!xbrafccBMON        ;68881
  532.     dc.b "f","b"+128,0,0,0,0,0,0
  533.     dc.w $f0ff,$60ff,snopBMON!xlongccBMON        ;68020
  534.     dc.b "b"+128,0,0,0,0,0,0,0
  535.     dc.w $f0ff,$6000,snopBMON!xwordccBMON
  536.     dc.b "b"+128,0,0,0,0,0,0,0
  537.     dc.w $f000,$6000,snopBMON!xshortccBMON
  538.     dc.b "b"+128,0,0,0,0,0,0,0
  539.  
  540.     dc.w $fff8,$f048,snopBMON!xpccodewordrelBMON    ;68851 only
  541.     dc.b "pd","b"+128,0,0,0,0,0
  542.     dc.w $ffc0,$f040,snopBMON!xpccodeeaBMON        ;68851 only
  543.     dc.b "p","s"+128,0,0,0,0,0,0
  544.     dc.w $fff8,$f248,snopBMON!xfccodewordrelBMON    ;68881
  545.     dc.b "fd","b"+128,0,0,0,0,0
  546.     dc.w $ffc0,$f240,snopBMON!xfccodeeaBMON        ;68881
  547.     dc.b "f","s"+128,0,0,0,0,0,0
  548.  
  549.     dc.w $f0f8,$50c8,snopBMON!xccodewordrelBMON    ;order !
  550.     dc.b "d","b"+128,0,0,0,0,0,0
  551.     dc.w $f0c0,$50c0,snopBMON!xccodeeaBMON
  552.     dc.b "s"+128,0,0,0,0,0,0,0
  553.  
  554.     dc.w $ffc0,$4800,stabBMON!xsrceaBMON
  555.     dc.b "nbc","d"+128,0,0,0,0
  556.     dc.w $ffc0,$4840,stabBMON!xsrceaBMON
  557.     dc.b "pe","a"+128,0,0,0,0,0
  558.     dc.w $ffc0,$4ac0,stabBMON!xsrceaBMON
  559.     dc.b "ta","s"+128,0,0,0,0,0
  560.     dc.w $ffc0,$4e80,stabBMON!xsrceaBMON
  561.     dc.b "js","r"+128,0,0,0,0,0
  562.     dc.w $ffc0,$4ec0,stabBMON!xsrceaBMON
  563.     dc.b "jm","p"+128,0,0,0,0,0
  564.     dc.w $ffc0,$e0c0,stabBMON!xsrceaBMON
  565.     dc.b "as","r"+128,0,0,0,0,0
  566.     dc.w $ffc0,$e1c0,stabBMON!xsrceaBMON
  567.     dc.b "as","l"+128,0,0,0,0,0
  568.     dc.w $ffc0,$e2c0,stabBMON!xsrceaBMON
  569.     dc.b "ls","r"+128,0,0,0,0,0
  570.     dc.w $ffc0,$e3c0,stabBMON!xsrceaBMON
  571.     dc.b "ls","l"+128,0,0,0,0,0
  572.     dc.w $ffc0,$e4c0,stabBMON!xsrceaBMON
  573.     dc.b "rox","r"+128,0,0,0,0
  574.     dc.w $ffc0,$e5c0,stabBMON!xsrceaBMON
  575.     dc.b "rox","l"+128,0,0,0,0
  576.     dc.w $ffc0,$e6c0,stabBMON!xsrceaBMON
  577.     dc.b "ro","r"+128,0,0,0,0,0
  578.     dc.w $ffc0,$e7c0,stabBMON!xsrceaBMON
  579.     dc.b "ro","l"+128,0,0,0,0,0
  580.     dc.w $ffc0,$f100,stabBMON!xsrceaBMON        ;68851 only
  581.     dc.b "psav","e"+128,0,0,0
  582.     dc.w $ffc0,$f140,stabBMON!xsrceaBMON        ;68851 only
  583.     dc.b "prestor","e"+128
  584.     dc.w $ffc0,$f300,stabBMON!xsrceaBMON        ;68881
  585.     dc.b "fsav","e"+128,0,0,0
  586.     dc.w $ffc0,$f340,stabBMON!xsrceaBMON        ;68881
  587.     dc.b "frestor","e"+128
  588.  
  589.     dc.w $ffc0,$4c40,stabBMON!xdivullBMON        ;68020
  590.     dc.b "divul.","l"+128,0
  591.     dc.w $ffc0,$4c40,stabBMON!xdivsllBMON        ;68020
  592.     dc.b "divsl.","l"+128,0
  593.     dc.w $ffc0,$4c40,stabBMON!xmululBMON        ;68020
  594.     dc.b "divu.","l"+128,0,0
  595.     dc.w $ffc0,$4c40,stabBMON!xmulslBMON        ;68020
  596.     dc.b "divs.","l"+128,0,0
  597.     dc.w $ffc0,$4c00,stabBMON!xmululBMON        ;68020
  598.     dc.b "mulu.","l"+128,0,0
  599.     dc.w $ffc0,$4c00,stabBMON!xmulslBMON        ;68020
  600.     dc.b "muls.","l"+128,0,0
  601.  
  602.     dc.w $f1c0,$80c0,stabBMON!xeatodxBMON
  603.     dc.b "div","u"+128,0,0,0,0
  604.     dc.w $f1c0,$81c0,stabBMON!xeatodxBMON
  605.     dc.b "div","s"+128,0,0,0,0
  606.     dc.w $f1c0,$c0c0,stabBMON!xeatodxBMON
  607.     dc.b "mul","u"+128,0,0,0,0
  608.     dc.w $f1c0,$c1c0,stabBMON!xeatodxBMON
  609.     dc.b "mul","s"+128,0,0,0,0
  610.     dc.w $f1c0,$4180,stabBMON!xeatodxBMON
  611.     dc.b "chk.","w"+128,0,0,0
  612.     dc.w $f1c0,$4100,stabBMON!xea2todxBMON        ;68020
  613.     dc.b "chk.","l"+128,0,0,0
  614.  
  615.     dc.w $f0c0,$90c0,s8BMON!xsize8eatoax9bBMON
  616.     dc.b "sub","a"+128,0,0,0,0
  617.     dc.w $f0c0,$b0c0,s8BMON!xsize8eatoax9bBMON
  618.     dc.b "cmp","a"+128,0,0,0,0
  619.     dc.w $f0c0,$d0c0,s8BMON!xsize8eatoax9bBMON
  620.     dc.b "add","a"+128,0,0,0,0
  621.  
  622.     dc.w $f100,$8000,s67BMON!xsize67eatodxBMON
  623.     dc.b "o","r"+128,0,0,0,0,0,0
  624.     dc.w $f100,$9000,s67BMON!xsize67eatodxBMON
  625.     dc.b "su","b"+128,0,0,0,0,0
  626.     dc.w $f100,$b000,s67BMON!xsize67eatodxBMON
  627.     dc.b "cm","p"+128,0,0,0,0,0
  628.     dc.w $f100,$c000,s67BMON!xsize67eatodxBMON
  629.     dc.b "an","d"+128,0,0,0,0,0
  630.     dc.w $f100,$d000,s67BMON!xsize67eatodxBMON
  631.     dc.b "ad","d"+128,0,0,0,0,0
  632.  
  633.     dc.w $f100,$8100,s67BMON!xdxtoeaBMON
  634.     dc.b "o","r"+128,0,0,0,0,0,0
  635.     dc.w $f100,$9100,s67BMON!xdxtoeaBMON
  636.     dc.b "su","b"+128,0,0,0,0,0
  637.     dc.w $f100,$b100,s67BMON!xdxtoeaBMON
  638.     dc.b "eo","r"+128,0,0,0,0,0
  639.     dc.w $f100,$c100,s67BMON!xdxtoeaBMON
  640.     dc.b "an","d"+128,0,0,0,0,0
  641.     dc.w $f100,$d100,s67BMON!xdxtoeaBMON
  642.     dc.b "ad","d"+128,0,0,0,0,0
  643.  
  644.     dc.w $ffc0,$0800,stabBMON!xinibtoeaBMON
  645.     dc.b "bts","t"+128,0,0,0,0
  646.     dc.w $ffc0,$0840,stabBMON!xinibtoeaBMON
  647.     dc.b "bch","g"+128,0,0,0,0
  648.     dc.w $ffc0,$0880,stabBMON!xinibtoeaBMON
  649.     dc.b "bcl","r"+128,0,0,0,0
  650.     dc.w $ffc0,$08c0,stabBMON!xinibtoeaBMON
  651.     dc.b "bse","t"+128,0,0,0,0
  652.  
  653.     dc.w $f9c0,$08c0,s9a_BMON!xcasBMON        ;68020
  654.     dc.b "ca","s"+128,0,0,0,0,0
  655.     dc.w $f9c0,$00c0,s9aBMON!xchk2BMON        ;68020
  656.     dc.b "chk","2"+128,0,0,0,0
  657.     dc.w $f9c0,$00c0,s9aBMON!xcmp2BMON        ;68020
  658.     dc.b "cmp","2"+128,0,0,0,0
  659.  
  660.     dc.w $f100,$5000,s67BMON!xsize67i9btoeaBMON
  661.     dc.b "add","q"+128,0,0,0,0
  662.     dc.w $f100,$5100,s67BMON!xsize67i9btoeaBMON
  663.     dc.b "sub","q"+128,0,0,0,0
  664.  
  665.     dc.w $f118,$e000,s67BMON!xsize67x9btodx02BMON
  666.     dc.b "as","r"+128,0,0,0,0,0
  667.     dc.w $f118,$e008,s67BMON!xsize67x9btodx02BMON
  668.     dc.b "ls","r"+128,0,0,0,0,0
  669.     dc.w $f118,$e010,s67BMON!xsize67x9btodx02BMON
  670.     dc.b "rox","r"+128,0,0,0,0
  671.     dc.w $f118,$e018,s67BMON!xsize67x9btodx02BMON
  672.     dc.b "ro","r"+128,0,0,0,0,0
  673.     dc.w $f118,$e100,s67BMON!xsize67x9btodx02BMON
  674.     dc.b "as","l"+128,0,0,0,0,0
  675.     dc.w $f118,$e108,s67BMON!xsize67x9btodx02BMON
  676.     dc.b "ls","l"+128,0,0,0,0,0
  677.     dc.w $f118,$e110,s67BMON!xsize67x9btodx02BMON
  678.     dc.b "rox","l"+128,0,0,0,0
  679.     dc.w $f118,$e118,s67BMON!xsize67x9btodx02BMON
  680.     dc.b "ro","l"+128,0,0,0,0,0
  681.  
  682.     dc.w $ff00,$0000,s67BMON!xsize67ixtoeaBMON
  683.     dc.b "or","i"+128,0,0,0,0,0
  684.     dc.w $ff00,$0200,s67BMON!xsize67ixtoeaBMON
  685.     dc.b "and","i"+128,0,0,0,0
  686.     dc.w $ff00,$0400,s67BMON!xsize67ixtoeaBMON
  687.     dc.b "sub","i"+128,0,0,0,0
  688.     dc.w $ff00,$0600,s67BMON!xsize67ixtoeaBMON
  689.     dc.b "add","i"+128,0,0,0,0
  690.     dc.w $ff00,$0a00,s67BMON!xsize67ixtoeaBMON
  691.     dc.b "eor","i"+128,0,0,0,0
  692.     dc.w $ff00,$0c00,s67BMON!xsize67ixtoeaBMON
  693.     dc.b "cmp","i"+128,0,0,0,0
  694.  
  695.     dc.w $f1c0,$0100,stabBMON!xdxtoeaBMON
  696.     dc.b "bts","t"+128,0,0,0,0
  697.     dc.w $f1c0,$0140,stabBMON!xdxtoeaBMON
  698.     dc.b "bch","g"+128,0,0,0,0
  699.     dc.w $f1c0,$0180,stabBMON!xdxtoeaBMON
  700.     dc.b "bcl","r"+128,0,0,0,0
  701.     dc.w $f1c0,$01c0,stabBMON!xdxtoeaBMON
  702.     dc.b "bse","t"+128,0,0,0,0
  703.  
  704.     dc.w $ff00,$0e00,s67BMON!xmovesBMON        ;68010
  705.     dc.b "move","s"+128,0,0,0
  706.  
  707.     dc.w $ff00,$4000,s67BMON!xsrceaBMON
  708.     dc.b "neg","x"+128,0,0,0,0
  709.     dc.w $ff00,$4200,s67BMON!xsrceaBMON
  710.     dc.b "cl","r"+128,0,0,0,0,0
  711.     dc.w $ff00,$4400,s67BMON!xsrceaBMON
  712.     dc.b "ne","g"+128,0,0,0,0,0
  713.     dc.w $ff00,$4600,s67BMON!xsrceaBMON
  714.     dc.b "no","t"+128,0,0,0,0,0
  715.     dc.w $ff00,$4a00,s67BMON!xsrceaBMON
  716.     dc.b "ts","t"+128,0,0,0,0,0
  717.  
  718.     dc.w $c000,$0000,snopBMON!ximoveBMON
  719.     dc.b "move","."+128,0,0,0
  720.  
  721.     dc.w $f000,$a000,stabBMON!xdcwopBMON
  722.     dc.b "line-","a"+128,0,0
  723.     dc.w $f000,$f000,stabBMON!xdcwopBMON
  724.     dc.b "line-","f"+128,0,0
  725.     dc.w $0000,$0000,stabBMON!xdcwopBMON
  726.     dc.b "dc.","w"+128,0,0,0,0
  727.  
  728. ;---------------------------------------------------------------
  729. xopfailBMON=0            ;dummy
  730. xnoopsBMON=1
  731. xdcwopBMON=2
  732. xeatoccrBMON=3
  733. xeatosrBMON=4
  734. xsrtoeaBMON=5
  735. xwordbxxBMON=6
  736. xwordccBMON=7
  737. xshortbxxBMON=8
  738. xshortccBMON=9
  739. xeatoaxBMON=10
  740. xeatodxBMON=11
  741. xdxtoeaBMON=12
  742. xiwordtoccrBMON=13
  743. xiwordtosrBMON=14
  744. xiwordBMON=15
  745. xccodewordrelBMON=16
  746. xinibtoeaBMON=17
  747. xccodeeaBMON=18
  748. xsrceaBMON=19
  749. xsize67eatodxBMON=20
  750. xsize8eatoax9bBMON=21
  751. xsize67adsbxBMON=22
  752. xsize67ixtoeaBMON=23
  753. xsize67i9btoeaBMON=24
  754. xsize67x9btodx02BMON=25
  755. xitrapBMON=26
  756. xsrcdx02BMON=27
  757. ximuspBMON=28
  758. ximoveBMON=29
  759. ximoveqBMON=30
  760. xicmpmBMON=31
  761. xxbcdBMON=32
  762. xsize6movepBMON=33
  763. ximovemBMON=34
  764. xdx9btodx02BMON=35
  765. xax9btoax02BMON=36
  766. xdx9btoax02BMON=37
  767. xiunlkBMON=38
  768. xilinkBMON=39
  769. ximovecBMON=40
  770. xccrtoeaBMON=41
  771. xmovesBMON=42
  772. xbfieldBMON=43
  773. xbfieldtodxBMON=44
  774. xdxtobfieldBMON=45
  775. xbkptBMON=46
  776. xlongbxxBMON=47
  777. xlongccBMON=48
  778. xcallmBMON=49
  779. xcasBMON=50
  780. xcas2BMON=51
  781. xchk2BMON=52
  782. xcmp2BMON=53
  783. xrx03BMON=54
  784. xccodeBMON=55
  785. xccodesizeBMON=56
  786. xilinklgBMON=57
  787. xmululBMON=58
  788. xmulslBMON=59
  789. xdivullBMON=60
  790. xdivsllBMON=61
  791. xpackBMON=62
  792. xea2todxBMON=63    ;chk.l
  793. xfccodeBMON=64
  794. xfccodesizeBMON=65
  795. xfccodewordrelBMON=66
  796. xfccodeeaBMON=67
  797. xfnopBMON=68
  798. xfmovecrBMON=69
  799. xpmoveBMON=70
  800. xpmovefdBMON=71
  801. xpflushaBMON=72
  802. xpflushBMON=73
  803. xploadBMON=74
  804. xptestBMON=75
  805. xidbcacBMON=76
  806. xidbindBMON=77
  807. xmov16BMON=78
  808. xpccodeeaBMON=79
  809. xpccodewordrelBMON=80
  810. xpccodeBMON=81
  811. xpccodesizeBMON=82
  812. xbrapccBMON=83
  813. xbrafccBMON=84
  814. xpflushsBMON=85
  815. xpflushrBMON=86
  816. xpvalidBMON=87
  817. xpflush40BMON=88
  818. xmov162BMON=89
  819. xlpstopBMON=90
  820. xtblBMON=91
  821. xfpuBMON=92
  822. xfmovelBMON=93
  823. xfmovemlBMON=94
  824. xfmovemxBMON=95
  825.  
  826.         endc
  827.  
  828. ;---------------------------------------------------------------
  829. assoffsBMON:dc.w aopfailBMON,anoopsBMON,adcwopBMON,aeatoccrBMON,aeatosrBMON,asrtoeaBMON
  830.     dc.w awordbxxBMON,awordccBMON
  831.     dc.w ashortbxxBMON,ashortccBMON,aeatoaxBMON,aeatodxBMON,adxtoeaBMON,aiwordtoccrBMON
  832.     dc.w aiwordtosrBMON,aiwordBMON,accodewordrelBMON,ainibtoeaBMON,accodeeaBMON,asrceaBMON
  833.     dc.w asize67eatodxBMON,asize8eatoax9bBMON,asize67adsbxBMON,asize67ixtoeaBMON
  834.     dc.w asize67i9btoeaBMON,asize67x9btodx02BMON,aitrapBMON,asrcdx02BMON,aimuspBMON
  835.     dc.w aimoveBMON,aimoveqBMON,aicmpmBMON,axbcdBMON,asize6movepBMON
  836.     dc.w aimovemBMON,adx9btodx02BMON,aax9btoax02BMON,adx9btoax02BMON
  837.     dc.w aiunlkBMON,ailinkBMON,aimovecBMON,accrtoeaBMON,aimovesBMON,abfieldBMON,abfieldtodxBMON
  838.     dc.w adxtobfieldBMON,abkptBMON,alongbxxBMON,alongccBMON,aicallmBMON,acasBMON,acas2BMON
  839.     dc.w achk2BMON,acmp2BMON,artmBMON,atpccBMON,atpccsizeBMON,alinklgBMON,amululBMON,amulslBMON
  840.     dc.w adivullBMON,adivsllBMON,apackBMON,aea2todxBMON,atpfccBMON,atpfccsizeBMON
  841.     dc.w afccodewordrelBMON,afccodeeaBMON,afnopBMON,afmovecrBMON,apmoveBMON,apmovefdBMON
  842.     dc.w apflushaBMON,apflushBMON,aploadBMON,aptestBMON,aidbcacBMON,aidbindBMON,amov16BMON
  843.     dc.w apccodeeaBMON,apccodewordrelBMON,atppccBMON,atppccsizeBMON,abrapccBMON,abrafccBMON
  844.     dc.w apflushsBMON,apflushrBMON,apvalidBMON,apflush40BMON,amov162BMON,alpstopBMON
  845.     dc.w atblBMON,afpuBMON,afmovelBMON,afmovemlBMON,afmovemxBMON
  846.  
  847. ;---------------------------------------------------------------
  848. assubsBMON:
  849. aopfailBMON=*-assubsBMON
  850. anoopsBMON=*-assubsBMON
  851.     rts
  852. adcwopBMON=*-assubsBMON
  853.     bsr.w atoword_BMON
  854.     move.w d0,op68000
  855.     rts
  856. aeatoccrBMON=*-assubsBMON
  857.     sf imsizeBMON
  858.     bsr.w asseaBMON
  859.     lea toccrtxtBMON(pc),a0
  860.     bra.w cmptxtBMON
  861. aeatosrBMON=*-assubsBMON
  862.     move.b #1,imsizeBMON
  863.     bsr.w asseaBMON
  864.     lea tosrtxtBMON(pc),a0
  865.     bra.w cmptxtBMON
  866.  
  867. accrtoeaBMON=*-assubsBMON
  868.     lea ccrtxtBMON(pc),a0
  869.     bra.b assreaBMON
  870. asrtoeaBMON=*-assubsBMON
  871.     lea srtxtBMON(pc),a0
  872. assreaBMON:    bsr.w cmptxtBMON
  873.     bra.w asstoeaBMON
  874.  
  875. abrapccBMON=*-assubsBMON
  876.     bsr.w asspccodeBMON
  877.     bra.b abraf0BMON
  878. abrafccBMON=*-assubsBMON
  879.     bsr.w assfccodeBMON
  880. abraf0BMON:    or.w d0,op68000
  881.     cmp.b #".",(a3)+
  882.     bne.w failBMON
  883.     cmp.b #"w",(a3)+
  884.     beq.b awdcc0BMON
  885.     bset #6,op68000+1    ;long
  886.     cmp.b #"l",-1(a3)
  887.     beq.b algcc0BMON
  888.     bra.b awdbxx1BMON        ;failBMON
  889. awordccBMON=*-assubsBMON
  890.     bsr.w assccodeBMON
  891.     cmp.b #".",(a3)+
  892.     bne.b awdbxx1BMON        ;failBMON
  893.     cmp.b #"w",(a3)+    ;bxx.w
  894.     bne.b awdbxx1BMON        ;failBMON
  895. awdcc0BMON:    bsr.w asstabBMON
  896. awordbxxBMON=*-assubsBMON
  897. awdrelBMON:    bsr.w atolong_BMON
  898.     subq.l #2,d0
  899.     sub.l lginstrBMON,d0    ;fdbx dx,lab...
  900.     sub.l paraBMON,d0
  901.     move.l d0,d1
  902.     ;beq.b awdbxx1BMON        ;beq.w *+2
  903.     bpl.b awdbxx0BMON
  904.     not.l d1
  905. awdbxx0BMON:cmp.l #$7fff,d1
  906.     bhi.b awdbxx1BMON
  907.     bra.w storewordBMON 
  908. awdbxx1BMON:sf d7
  909.     rts
  910. alongccBMON=*-assubsBMON
  911.     bsr.w assccodeBMON
  912.     cmp.b #".",(a3)+
  913.     bne.b awdbxx1BMON        ;failBMON
  914.     cmp.b #"l",(a3)+    ;bxx.l
  915.     bne.b awdbxx1BMON        ;failBMON
  916. algcc0BMON:    bsr.w asstabBMON
  917. alongbxxBMON=*-assubsBMON
  918.     bsr.w atolong_BMON
  919.     subq.l #2,d0
  920.     sub.l paraBMON,d0
  921.     bra.w storelongBMON
  922.  
  923. ashortccBMON=*-assubsBMON
  924.     bsr.w assccodeBMON
  925.     cmp.b #".",(a3)+
  926.     bne.b ashbxx1BMON        ;failBMON
  927.     moveq #"b",d0
  928.     sub.b (a3)+,d0
  929.     beq.b ashort0BMON
  930.     cmp.b #"b"-"s",d0    ;clone
  931.     bne.b ashbxx1BMON        ;failBMON
  932. ashort0BMON:bsr.w asstabBMON
  933. ashortbxxBMON=*-assubsBMON
  934. ashbxxBMON:    bsr.w atolong_BMON
  935.     subq.l #2,d0
  936.     sub.l paraBMON,d0
  937.     or.b d0,op68000+1
  938.     beq.b ashbxx1BMON
  939.     bpl.b ashbxx0BMON
  940.     not.l d0
  941. ashbxx0BMON:moveq #$7f,d1
  942.     cmp.l d1,d0
  943.     bls.b ashbxx2BMON
  944. ashbxx1BMON:sf d7
  945. ashbxx2BMON:rts
  946.  
  947. aeatoaxBMON=*-assubsBMON
  948.     bsr.w asseaBMON
  949.     bra.w asstoax9bBMON
  950.  
  951. aea2todxBMON=*-assubsBMON
  952.     move.b #2,imsizeBMON
  953.     bra.b aea2dxBMON
  954. aeatodxBMON=*-assubsBMON
  955.     move.b #1,imsizeBMON
  956. aea2dxBMON:
  957. asize67eatodxBMON=*-assubsBMON
  958.     bsr.w asseaBMON
  959.     bra.w asstodx9bBMON
  960.  
  961. adxtoeaBMON=*-assubsBMON
  962.     bsr.w assdx9bBMON
  963.     bra.w asstoeaBMON
  964.  
  965. aiwordtoccrBMON=*-assubsBMON
  966.     cmp.b #"#",(a3)+
  967.     bne.w failBMON
  968.     bsr.w atobyte_BMON
  969.     bsr.w storewordBMON
  970.     lea toccrtxtBMON(pc),a0
  971.     bra.w cmptxtBMON
  972. aiwordtosrBMON=*-assubsBMON
  973.     bsr.b aiwrdBMON
  974.     lea tosrtxtBMON(pc),a0
  975.     bra.w cmptxtBMON
  976. aiwordBMON=*-assubsBMON
  977. aiwrdBMON:    cmp.b #"#",(a3)+
  978.     bne.w failBMON
  979.     bsr.w atoword_BMON
  980.     bra.w storewordBMON
  981. alpstopBMON=*-assubsBMON
  982.     move.w #$01c0,d0
  983.     bsr.w storeinstrBMON
  984.     bra.b aiwrdBMON
  985. atblBMON=*-assubsBMON
  986.     moveq #0,d0    ;unsigned
  987.     moveq #"u",d1
  988.     sub.b (a3)+,d1
  989.     beq.b atbluBMON
  990.     add.b #"s"-"u",d1
  991.     bne.w failBMON
  992.     bset #11,d0    ;signed
  993. atbluBMON:    cmp.b #"n",(a3)
  994.     bne.b atblnBMON
  995.     bset #10,d0    ;round
  996.     addq.w #1,a3
  997. atblnBMON:    cmp.b #".",(a3)+
  998.     bne.w failBMON
  999.     moveq #"b",d1
  1000.     sub.b (a3)+,d1
  1001.     beq.b atblbBMON
  1002.     bset #6,d0
  1003.     cmp.b #"b"-"w",d1
  1004.     beq.b atblbBMON
  1005.     cmp.b #"b"-"l",d1
  1006.     bne.w failBMON
  1007.     eor.b #%11000000,d0
  1008. atblbBMON:    bsr.w storeinstrBMON    
  1009.     bsr.w asstabBMON
  1010.     cmp.b #"d",(a3)+
  1011.     bne.b atbleaBMON
  1012.     bsr.w assxx02BMON
  1013.     cmp.b #":",(a3)+
  1014.     bne.w failBMON
  1015.     bsr.w assdn02BMON
  1016.     or.b d0,op68000+3
  1017.     bra.b atbldBMON    
  1018. atbleaBMON:    subq.w #1,a3
  1019.     bsr.w asseaBMON
  1020.     bset #0,op68000+2
  1021. atbldBMON:    cmp.b #",",(a3)+
  1022.     bne.w failBMON
  1023.     bsr.w assdn02BMON
  1024.     rol.w #4,d0
  1025.     or.b d0,op68000+2
  1026.     rts
  1027. afpuBMON=*-assubsBMON
  1028.     sf d7
  1029.     rts
  1030. afmovemxBMON=*-assubsBMON
  1031.     moveq #0,d0
  1032.     bsr.w storeinstrBMON
  1033.     cmp.b #"d",(a3)
  1034.     beq.b afmvmx0BMON        ;dynamic mask
  1035.     cmp.b #"f",(a3)
  1036.     beq.b afmvmx0BMON
  1037.     bsr asseaBMON
  1038.     cmp.b #",",(a3)+
  1039.     bne.w failBMON
  1040.     bra assfprxBMON
  1041. afmvmx0BMON:bset #13-8,op68000+2
  1042.     bsr assfprxBMON
  1043.     bsr asstoeaBMON
  1044.     moveq #%111000,d0
  1045.     and.w op68000,d0
  1046.     beq.w failBMON        ;dn
  1047.     cmp.b #%001000,d0    ;an
  1048.     beq.w failBMON
  1049.     cmp.b #%111100,d0    ;#
  1050.     beq.w failBMON
  1051.     cmp.b #%100000,d0    ;-(an)?
  1052.     bne.b afmvmx1BMON
  1053.     move.b op68000+3,d1    ;rl
  1054.     moveq #8-1,d0
  1055. afmvmx2BMON:lsr.b #1,d1
  1056.     roxl.b #1,d2
  1057.     dbf d0,afmvmx2BMON
  1058.     move.b d2,op68000+3
  1059.     bclr #12-8,op68000+2    ;predec mode
  1060. afmvmx1BMON:rts    
  1061.     
  1062.  
  1063. afmovemlBMON=*-assubsBMON
  1064.     st d5
  1065.     bra.b afmovemBMON
  1066. afmovelBMON=*-assubsBMON
  1067.     sf d5            ;fmovem flag
  1068. afmovemBMON:moveq #0,d4        ;fpcr counter
  1069.     move.w #$8000,d0
  1070.     bsr.w storeinstrBMON
  1071.     move.b #%010,imsizeBMON    ;long
  1072.     pea fpiar0BMON(pc)        ;fpiar,An check
  1073.     cmp.b #"f",(a3)
  1074.     bne.b afpcr1BMON
  1075.     bset #13-8,op68000+2
  1076.     bsr.b afpcrBMON
  1077.     bra asstoeaBMON
  1078. afpcr1BMON:    bsr asseaBMON
  1079.     cmp.b #",",(a3)+
  1080.     bne.b fpfailBMON
  1081. afpcrBMON:    cmp.b #"f",(a3)+
  1082.     bne.b fpfailBMON
  1083.     cmp.b #"p",(a3)+
  1084.     bne.b fpfailBMON
  1085.     moveq #12,d2
  1086.     cmp.b #"c",(a3)
  1087.     beq.b afpcr0BMON
  1088.     moveq #11,d2
  1089.     cmp.b #"s",(a3)
  1090.     beq.b afpcr0BMON
  1091.     moveq #10,d2
  1092.     cmp.b #"i",(a3)+
  1093.     bne.b fpfailBMON
  1094.     cmp.b #"a",(a3)
  1095.     bne.b fpfailBMON
  1096. afpcr0BMON:    addq.w #1,a3
  1097.     cmp.b #"r",(a3)+
  1098.     bne.b fpfailBMON
  1099.     bset d2,op68000+2
  1100.     addq.b #1,d4        ;fpcr counter
  1101.     cmp.b #"/",(a3)
  1102.     bne.b afpcr2BMON
  1103.     tst.b d5        ;fmovem flag
  1104.     beq.b fpfailBMON    
  1105.     addq.w #1,a3
  1106.     bra.b afpcrBMON
  1107. afpcr2BMON:    rts
  1108. fpiar0BMON:    moveq #%111000,d0
  1109.     and.b op68000+1,d0    ;ea field
  1110.     bne.b fpiar1BMON            ;Dn?
  1111.     cmp.b #1,d4            ;1 fpcr?
  1112.     bne.b fpfailBMON
  1113. fpiar1BMON:    subq.b #%001000,d0        ;An
  1114.     bne.b fpcrokBMON
  1115.     cmp.b #1,d4            ;1 fpcr?
  1116.     bne.b fpfailBMON
  1117.     btst #10-8,op68000+2    ;fpiar?
  1118.     bne.b fpcrokBMON
  1119. fpfailBMON:    sf d7
  1120. fpcrokBMON:    rts
  1121.  
  1122. afmovecrBMON=*-assubsBMON
  1123.     cmp.b #"#",(a3)+
  1124.     bne.w failBMON
  1125.     bsr.w atobyte_BMON
  1126.     beq.b amfk0BMON
  1127.     cmp.b #$3f,d0
  1128.     bhi.w failBMON
  1129.     cmp.b #$0b,d0
  1130.     bcs.w failBMON
  1131.     cmp.b #$0f,d0
  1132.     bls.b amfk0BMON
  1133.     cmp.b #$30,d0
  1134.     bcs.w failBMON 
  1135. amfk0BMON:    or.w #$5c00,d0
  1136.     bsr.w storewordBMON
  1137.     bra.w asstofpx79BMON
  1138.  
  1139. assfprxBMON:move.w #$d000,d0    ;postincr/cntrl mode
  1140.     cmp.b #"d",(a3)    ;dynamic mask?
  1141.     bne.b arxmvm2BMON
  1142.     addq.w #1,a3
  1143.     move.b (a3)+,d0
  1144.     sub.b #"0",d0
  1145.     bcs.w arxfailBMON
  1146.     cmp.b #7,d0
  1147.     bhi.w arxfailBMON
  1148.     lsl.b #4,d0
  1149.     bset #11,d0    ;dynamic
  1150.     bra.b arxmvm1BMON    
  1151. arxmvm2BMON:cmp.b #"f",(a3)+
  1152.     bne.b arxfailBMON
  1153.     cmp.b #"p",(a3)+
  1154.     bne.b arxfailBMON
  1155.     move.b (a3)+,d1
  1156.     sub.b #"0",d1
  1157.     bcs.b arxfailBMON
  1158.     cmp.b #7,d1
  1159.     bhi.b arxfailBMON
  1160.     moveq #7,d3
  1161.     sub.b d1,d3
  1162.     bset d3,d0
  1163. arxmvm4BMON:cmp.b #",",(a3)
  1164.     beq.b arxmvm1BMON
  1165.     cmp.b #"/",(a3)+
  1166.     beq.b arxmvm2BMON
  1167.     cmp.b #"-",-1(a3)
  1168.     bne.b arxmvm1BMON
  1169.     cmp.b #"f",(a3)+
  1170.     bne.b arxfailBMON
  1171.     cmp.b #"p",(a3)+
  1172.     bne.b arxfailBMON
  1173.     move.b (a3)+,d2
  1174.     sub.b #"0",d2
  1175.     bcs.b arxfailBMON
  1176.     cmp.b #7,d2
  1177.     bhi.b arxfailBMON
  1178.     cmp.b d1,d2
  1179.     bls.b arxfailBMON
  1180. arxmvm3BMON:addq.b #1,d1
  1181.     moveq #7,d3
  1182.     sub.b d1,d3
  1183.     bset d3,d0    
  1184.     cmp.b d1,d2
  1185.     bne.b arxmvm3BMON
  1186.     bra.b arxmvm4BMON
  1187. arxmvm1BMON:or.w d0,op68000+2
  1188.     rts
  1189. arxfailBMON:bra failBMON
  1190.     
  1191. apccodewordrelBMON=*-assubsBMON
  1192.     bsr.w asspccodeBMON
  1193.     bra.b accode1BMON
  1194. afccodewordrelBMON=*-assubsBMON
  1195.     bsr.w assfccodeBMON
  1196. accode1BMON:bsr.w storeinstrBMON    ;instrBMON
  1197.     bra.b accode0BMON        ;4bytes instrlen ok (oma bug)
  1198. accodewordrelBMON=*-assubsBMON
  1199.     bsr.w assccodeBMON
  1200. accode0BMON:bsr.w asstabBMON
  1201.     bsr.w assdx02BMON
  1202.     cmp.b #",",(a3)+
  1203.     beq.w awdrelBMON
  1204.     sf d7
  1205.     rts
  1206. ainibtoeaBMON=*-assubsBMON
  1207.     cmp.b #"#",(a3)+
  1208.     bne.w failBMON
  1209.     bsr.w atodnibBMON
  1210.     cmp.b #31,d0
  1211.     bhi.w failBMON
  1212.     bsr.w storeinstrBMON
  1213.     bra.w asstoeaBMON
  1214.  
  1215. apccodeeaBMON=*-assubsBMON
  1216.     bsr.w asspccodeBMON
  1217.     bra.b asrc1BMON
  1218. afccodeeaBMON=*-assubsBMON
  1219.     bsr.w assfccodeBMON
  1220. asrc1BMON:    bsr.w storeinstrBMON
  1221.     bra.b asrc0BMON
  1222. accodeeaBMON=*-assubsBMON
  1223.     bsr.w assccodeBMON
  1224. asrc0BMON:    bsr.w asstabBMON
  1225. asrceaBMON=*-assubsBMON
  1226.     bra.w asseaBMON
  1227.  
  1228. aimovesBMON=*-assubsBMON
  1229.     bsr.w storeinstrBMON    ;space
  1230.     moveq #0,d3
  1231.     cmp.b #",",2(a3)    ;xx,<ea>
  1232.     bne.b actlmvsBMON
  1233.     bset #11,d3
  1234.     bsr.w amvcregBMON
  1235.     addq.w #1,a3
  1236.     bsr.w asseaBMON
  1237.     bra.b aimvs0BMON
  1238. actlmvsBMON:bsr.w asseaBMON
  1239.     cmp.b #",",(a3)+
  1240.     bne.w failBMON
  1241.     bsr.w amvcregBMON
  1242. aimvs0BMON:    move.w d3,op68000+2
  1243.     rts
  1244.  
  1245. asize8eatoax9bBMON=*-assubsBMON
  1246.     bsr.w asseaBMON
  1247.     bra.w asstoax9bBMON
  1248.  
  1249. asize67ixtoeaBMON=*-assubsBMON
  1250.     cmp.b #"#",(a3)
  1251.     bne.w failBMON
  1252.     bsr.w asseaBMON        ;#$xx.x
  1253.     bra.w asstoeaBMON        ;clr previous ea !
  1254.  
  1255. asize67i9btoeaBMON=*-assubsBMON
  1256.     cmp.b #"#",(a3)+
  1257.     bne.w failBMON
  1258.     bsr.w atobyteBMON
  1259.     beq.w failBMON
  1260.     cmp.b #8,d0
  1261.     bhi.w failBMON    
  1262.     bne.b ai9b0BMON
  1263.     sf d0
  1264. ai9b0BMON:    add.b d0,d0
  1265.     or.b d0,op68000
  1266.     bra.w asstoeaBMON
  1267.  
  1268. asize67x9btodx02BMON=*-assubsBMON
  1269.     cmp.b #"#",(a3)+
  1270.     bne.b ashft0BMON
  1271.     bsr.w atobyteBMON
  1272.     beq.w failBMON
  1273.     cmp.b #8,d0
  1274.     bhi.w failBMON
  1275.     bne.b ashft1BMON
  1276.     sf d0
  1277. ashft1BMON:    add.b d0,d0
  1278.     or.b d0,op68000
  1279.     bra.w asstodx02BMON
  1280. ashft0BMON:    bset #5,op68000+1
  1281.     subq.w #1,a3
  1282.     bsr.w assdx9bBMON
  1283.     bra.w asstodx02BMON
  1284.  
  1285. aitrapBMON=*-assubsBMON
  1286.     cmp.b #"#",(a3)+
  1287.     bne.w failBMON
  1288.     bsr.w atodnibBMON
  1289.     cmp.b #15,d0
  1290.     bhi.w failBMON
  1291.     or.b d0,op68000+1
  1292.     rts
  1293. asrcdx02BMON=*-assubsBMON
  1294.     bra.w assdx02BMON
  1295. aimuspBMON=*-assubsBMON
  1296.     lea usptxtBMON(pc),a0
  1297.     cmp.b #"a",(a3)
  1298.     beq.b aimusp0BMON
  1299.     bset #3,op68000+1
  1300.     bsr.b aimusp1BMON
  1301.     cmp.b #",",(a3)+
  1302.     bra.w assax02BMON
  1303. aimusp0BMON:bsr.w assax02BMON
  1304.     cmp.b #",",(a3)+
  1305.     bne.w failBMON
  1306. aimusp1BMON:bra.w cmptxtBMON
  1307.  
  1308. apmovefdBMON=*-assubsBMON            ;68030mmu only
  1309.     move.w #$0100,d0
  1310.     bsr.b apmvfdBMON
  1311.     move.w op68000+2,d0
  1312.     cmp.w #$4100,d0            ;40:tc
  1313.     beq.w apfdokBMON
  1314.     eor.w #%0000100100000000,d0    ;08:tt0,0c:tt1,48:srp,4c:crp
  1315.     and.w #%1011101111111111,d0
  1316.     bne.w failBMON
  1317. apfdokBMON:    rts
  1318. apmoveBMON=*-assubsBMON
  1319.     bsr.b apregBMON
  1320.     move.l a1,a3        ;restore ptr
  1321.     tas d7            ;failBMON?, ignore failBMON
  1322.     beq.b afromeaBMON
  1323. apmv2eaBMON:move.w #$200,d0
  1324.     bsr.w storeinstrBMON
  1325.     bsr.b apregBMON
  1326.     bra.w asstoeaBMON
  1327. afromeaBMON:moveq #0,d0
  1328. apmvfdBMON:    bsr.w storeinstrBMON
  1329.     bsr.w asseaBMON
  1330.     cmp.b #",",(a3)+
  1331.     bne.w failBMON
  1332. apregBMON:    lea pregsBMON(pc),a0
  1333.     move.l a3,a1
  1334. aprglpBMON:    move.b (a0)+,d1
  1335.     beq.w failBMON
  1336. aprgcmpBMON:moveq #$7f,d0
  1337.     and.b (a0),d0
  1338.     cmp.b (a3)+,d0
  1339.     bne.b aprgskpBMON
  1340.     tst.b (a0)+
  1341.     bpl.b aprgcmpBMON
  1342.     bra.b aprokBMON
  1343. aprgskpBMON:tst.b (a0)+
  1344.     bpl.b aprgskpBMON
  1345.     move.l a1,a3
  1346.     bra.b aprglpBMON
  1347. aprokBMON:    or.b d1,op68000+2
  1348.     rts
  1349. aidbcacBMON=*-assubsBMON
  1350. aidb3BMON:    move.b (a3)+,d1
  1351.     cmp.b #"c",(a3)+
  1352.     bne.b aidb2BMON
  1353.     moveq #4-1,d0
  1354.     lea idctxBMON(pc),a0
  1355. aidb1BMON:    cmp.b (a0,d0.w),d1
  1356.     beq.b aidb0BMON
  1357.     dbf d0,aidb1BMON
  1358. aidb2BMON:    bra.w failBMON
  1359. aidb0BMON:    lsl.w #6,d0
  1360.     or.w d0,op68000
  1361.     rts
  1362. aidbindBMON=*-assubsBMON
  1363.     bsr.b aidb3BMON
  1364.     cmp.b #",",(a3)+
  1365.     bne.w failBMON
  1366. apflush40BMON=*-assubsBMON
  1367.     cmp.b #"(",(a3)+
  1368.     bne.w failBMON
  1369.     bsr.w assax02BMON
  1370.     cmp.b #")",(a3)+
  1371.     bne.w failBMON
  1372.     rts
  1373.  
  1374. aimovecBMON=*-assubsBMON
  1375.     moveq #0,d3
  1376.     cmp.b #"t",(a3)        ;movec tc, (68040)
  1377.     beq.b actlmvcBMON
  1378.     cmp.b #",",2(a3)    ;xx,xxx(x)
  1379.     bne.b actlmvcBMON
  1380.     bset #0,op68000+1
  1381.     bsr.b amvcregBMON
  1382.     addq.w #1,a3    ;cmp.b #",",(a3)+ bne.w failBMON
  1383.     bsr.b actrlmvBMON
  1384.     bra.b aimvc0BMON
  1385. actlmvcBMON:bsr.b actrlmvBMON
  1386.     cmp.b #",",(a3)+
  1387.     bne.w failBMON
  1388.     bsr.b amvcregBMON
  1389. aimvc0BMON:    move.w d3,d0
  1390.     bra.w storewordBMON
  1391. actrlmvBMON:lea cregsBMON-6(pc),a2
  1392. actrl1BMON:    addq.w #6,a2
  1393.     tst.b (a2)
  1394.     bmi.w actrl4BMON
  1395.     moveq #0,d1
  1396. actrl2BMON:    move.b 2(a2,d1.w),d0
  1397.     beq.b actrl0BMON
  1398.     cmp.b (a3,d1.w),d0
  1399.     bne.b actrl1BMON
  1400.     addq.b #1,d1
  1401.     cmp.b #4,d1
  1402.     bne.b actrl2BMON    
  1403. actrl0BMON:    or.w (a2),d3
  1404.     add.w d1,a3
  1405.     rts
  1406. actrl4BMON:    sf d7        ;failBMON
  1407.     rts
  1408. amvcregBMON:move.b (a3)+,d0
  1409.     cmp.b #"d",d0
  1410.     beq.b mvcdxBMON
  1411.     bset #15,d3    ;ax
  1412.     cmp.b #"a",d0
  1413.     bne.w actrl4BMON
  1414. mvcdxBMON:    bsr.w assrn02BMON
  1415.     ror.w #4,d0
  1416.     or.w d0,d3    ;ax/dx
  1417.     rts
  1418.  
  1419. abfieldtodxBMON=*-assubsBMON
  1420.     bsr.b abfi3BMON
  1421.     cmp.b #",",(a3)+
  1422.     bne.w failBMON
  1423.     cmp.b #"d",(a3)+
  1424.     bne.w failBMON
  1425.     moveq #0,d3
  1426.     bsr.b mvcdxBMON
  1427.     or.w d3,op68000+2
  1428.     rts
  1429. adxtobfieldBMON=*-assubsBMON
  1430.     cmp.b #"d",(a3)+
  1431.     bne.w failBMON
  1432.     moveq #0,d3
  1433.     bsr.b mvcdxBMON
  1434.     cmp.b #",",(a3)+
  1435.     bne.w failBMON
  1436.     bsr.b abfi3BMON
  1437.     or.w d3,op68000+2
  1438.     rts
  1439. abfieldBMON=*-assubsBMON
  1440. abfi3BMON:    bsr.w storeinstrBMON
  1441.     bsr.w asseaBMON
  1442.     cmp.b #"{",(a3)+
  1443.     bne.w failBMON
  1444.     bsr.b abfi2BMON
  1445.     and.w #%111111,d0
  1446.     lsl.w #6,d0
  1447.     move.w d0,d2
  1448.     cmp.b #":",(a3)+
  1449.     bne.w failBMON
  1450.     bsr.b abfi2BMON
  1451.     and.w #%111111,d0
  1452.     or.w d2,d0
  1453.     cmp.b #"}",(a3)+
  1454.     bne.w failBMON
  1455.     move.w d0,op68000+2
  1456.     rts
  1457. abfi2BMON:    cmp.b #"d",(a3)
  1458.     beq.b abfi1BMON
  1459.     bsr.w atodnibBMON
  1460.     beq.w failBMON
  1461.     cmp.b #32,d0
  1462.     bhi.w failBMON
  1463.     bclr #5,d0    ;bitfield32=0
  1464.     rts
  1465. abfi1BMON:    addq.w #1,a3
  1466.     move.b (a3)+,d0
  1467.     sub.b #"0",d0
  1468.     bcs.w failBMON
  1469.     cmp.b #7,d0
  1470.     bhi.w failBMON
  1471.     bset #5,d0
  1472.     rts
  1473. abkptBMON=*-assubsBMON
  1474.     cmp.b #"#",(a3)+
  1475.     bne.w failBMON
  1476.     bra.w assxx02BMON
  1477. apackBMON=*-assubsBMON
  1478.     cmp.b #"-",(a3)
  1479.     bne.b apadxBMON
  1480.     addq.w #1,a3
  1481.     cmp.b #"(",(a3)+
  1482.     bne.w failBMON
  1483.     bsr.w assax02BMON
  1484.     lea xbcdtxtBMON(pc),a0
  1485.     bsr.w cmptxtBMON
  1486.     bsr.w assax9bBMON
  1487.     cmp.b #")",(a3)+
  1488.     bne.w failBMON
  1489.     bset #3,op68000+1
  1490.     bra.b apad0BMON
  1491. apadxBMON:    bsr.w assdx02BMON
  1492.     bsr.w asstodx9bBMON
  1493. apad0BMON:    cmp.b #",",(a3)+
  1494.     bne.w failBMON
  1495.     bra.w aiwrdBMON
  1496. amov16BMON=*-assubsBMON
  1497.     cmp.b #"(",(a3)+
  1498.     bne.w failBMON
  1499.     bsr.w assax02BMON
  1500.     lea cmpmtxtBMON(pc),a0
  1501.     bsr.w cmptxtBMON
  1502.     bsr.w assan02BMON
  1503.     ror.w #4,d0
  1504.     or.w #$8000,d0
  1505.     bra.w storeinstrBMON
  1506. amov162BMON=*-assubsBMON
  1507.     cmp.b #"a",1(a3)    ;(ax)
  1508.     bne.b amov0BMON
  1509.     cmp.b #"(",(a3)+
  1510.     bne.w failBMON
  1511.     bsr.w assax02BMON
  1512.     cmp.b #")",(a3)+
  1513.     bne.w failBMON
  1514.     moveq #%000000,d1
  1515.     cmp.b #"+",(a3)+
  1516.     beq.b amov1BMON
  1517.     subq.w #1,a3
  1518.     moveq #%010000,d1
  1519. amov1BMON:    cmp.b #",",(a3)+
  1520.     bne.w failBMON
  1521.     or.b d1,op68000+1
  1522. amov2BMON:    move.w op68000,-(a7)
  1523.     bsr.w asseaBMON
  1524.     moveq #%111111,d0
  1525.     and.w op68000,d0
  1526.     move.w (a7)+,op68000
  1527.     cmp.w #%111001,d0
  1528.     bne.w failBMON
  1529.     rts
  1530. amov0BMON:    bsr.b amov2BMON
  1531.     cmp.b #",",(a3)+
  1532.     bne.w failBMON
  1533.     cmp.b #"(",(a3)+
  1534.     bne.w failBMON
  1535.     bsr.w assax02BMON
  1536.     cmp.b #")",(a3)+
  1537.     bne.w failBMON
  1538.     moveq #%001000,d1
  1539.     cmp.b #"+",(a3)+
  1540.     beq.b amov3BMON
  1541.     moveq #%011000,d1
  1542. amov3BMON:    or.b d1,op68000+1
  1543.     rts
  1544.  
  1545. aimoveBMON=*-assubsBMON
  1546.     moveq #%01,d0
  1547.     sf imsizeBMON
  1548.     cmp.b #"b",(a3)
  1549.     beq.b aimov0BMON
  1550.     moveq #%11,d0
  1551.     addq.b #1,imsizeBMON
  1552.     cmp.b #"w",(a3)
  1553.     beq.b aimov0BMON
  1554.     moveq #%10,d0
  1555.     addq.b #1,imsizeBMON
  1556.     cmp.b #"l",(a3)
  1557.     bne.w failBMON
  1558. aimov0BMON:    lsl.b #4,d0
  1559.     or.b d0,op68000
  1560.     addq.w #1,a3
  1561.     bsr.w asstabBMON
  1562.     bsr.w asseaBMON
  1563.     move.w op68000,-(a7)
  1564.     bsr.w asstoeaBMON
  1565.     move.w op68000,d1
  1566.     move.w (a7)+,op68000
  1567.     move.w d1,d0
  1568.     and.w #%111,d0
  1569.     ror.w #7,d0
  1570.     or.w d0,op68000
  1571.     and.w #%111000,d1
  1572.     lsl.w #3,d1
  1573.     or.w d1,op68000
  1574.     rts
  1575. aimoveqBMON=*-assubsBMON
  1576.     sf imsizeBMON
  1577.     bsr.w asseaBMON
  1578.     move.w op68000,d0
  1579.     clr.l oplen
  1580.     and.w #%111111,d0    ;#x
  1581.     cmp.w #%111100,d0
  1582.     bne.w failBMON
  1583.     move.b op68000+3,op68000+1
  1584.     bra.w asstodx9bBMON
  1585. aicallmBMON=*-assubsBMON
  1586.     cmp.b #"#",(a3)+
  1587.     bne.w failBMON
  1588.     bsr.w atobyte_BMON        ;d0.l
  1589.     bsr.w storeinstrBMON
  1590.     bra.w asstoeaBMON
  1591.  
  1592. acasBMON=*-assubsBMON
  1593.     bsr.b assdn02BMON
  1594.     move.w d0,d2
  1595.     cmp.b #",",(a3)+
  1596.     bne.w failBMON
  1597.     bsr.b assdn02BMON
  1598.     lsl.w #6,d0
  1599.     or.w d2,d0
  1600.     bsr.w storeinstrBMON
  1601.     bra.w asstoeaBMON
  1602.  
  1603. assan02BMON:cmp.b #"a",(a3)+
  1604.     bne.w failBMON
  1605.     bra.b assrn02BMON
  1606. assdn02BMON:cmp.b #"d",(a3)+
  1607.     bne.w failBMON
  1608. assrn02BMON:move.b (a3)+,d0
  1609.     sub.b #"0",d0
  1610.     bcs.w failBMON
  1611.     cmp.b #7,d0
  1612.     bhi.w failBMON
  1613.     ext.w d0
  1614.     rts
  1615. acas2BMON=*-assubsBMON
  1616.     cmp.b #"w",(a3)
  1617.     beq.b aca0BMON    
  1618.     cmp.b #"l",(a3)
  1619.     bne.w failBMON
  1620.     bset #9-8,op68000
  1621. aca0BMON:    addq.w #1,a3
  1622.     bsr.w asstabBMON
  1623.     bsr.b assdn02BMON
  1624.     swap d0
  1625.     cmp.b #":",(a3)+
  1626.     bne.b cas2flBMON
  1627.     bsr.b assdn02BMON
  1628.     move.l d0,d1
  1629.     cmp.b #",",(a3)+
  1630.     bne.b cas2flBMON
  1631.     bsr.b assdn02BMON
  1632.     swap d0
  1633.     cmp.b #":",(a3)+
  1634.     bne.b cas2flBMON
  1635.     bsr.b assdn02BMON
  1636.     lsl.l #6,d0
  1637.     or.l d0,d1
  1638.     cmp.b #",",(a3)+
  1639.     bne.b cas2flBMON
  1640.     cmp.b #"(",(a3)+
  1641.     bne.b cas2flBMON
  1642.     moveq #0,d3
  1643.     bsr.w amvcregBMON
  1644.     cmp.b #")",(a3)+
  1645.     bne.b cas2flBMON
  1646.     cmp.b #":",(a3)+
  1647.     bne.b cas2flBMON
  1648.     cmp.b #"(",(a3)+
  1649.     bne.b cas2flBMON
  1650.     swap d3
  1651.     bsr.w amvcregBMON
  1652.     cmp.b #")",(a3)+
  1653.     bne.b cas2flBMON
  1654.     or.l d1,d3
  1655.     move.l d3,d0
  1656.     bra.w storelongBMON
  1657. cas2flBMON:    sf d7
  1658.     rts
  1659. achk2BMON=*-assubsBMON
  1660.     move.w #$0800,d3
  1661.     bra.b achkcmpBMON
  1662. acmp2BMON=*-assubsBMON
  1663.     moveq #0,d3
  1664. achkcmpBMON:bsr.w storeinstrBMON
  1665.     bsr.w asseaBMON
  1666.     cmp.b #",",(a3)+
  1667.     bne.b cas2flBMON
  1668.     bsr.w amvcregBMON    ;or.w ?,d3
  1669.     move.w d3,op68000+2
  1670.     rts
  1671.  
  1672. artmBMON=*-assubsBMON
  1673.     moveq #0,d3
  1674.     bsr.w amvcregBMON
  1675.     rol.w #4,d3
  1676.     or.w d3,op68000    ;0000ynnn
  1677.     rts
  1678.  
  1679. atppccsizeBMON=*-assubsBMON
  1680.     bsr.w asspccodeBMON
  1681.     bra.b atpc2BMON
  1682. atpfccsizeBMON=*-assubsBMON
  1683.     bsr.w assfccodeBMON
  1684. atpc2BMON:    bsr.w storeinstrBMON
  1685.     bra.b atpc1BMON
  1686. atpccsizeBMON=*-assubsBMON
  1687.     bsr.w assccodeBMON
  1688. atpc1BMON:    cmp.b #".",(a3)+
  1689.     bne.w failBMON
  1690.     move.b (a3)+,d0
  1691.     bsr.w asstabBMON
  1692.     cmp.b #"w",d0
  1693.     beq.w aiwrdBMON
  1694.     cmp.b #"l",d0
  1695.     bne.w failBMON
  1696.     bset #0,op68000+1
  1697. atpc0BMON:    cmp.b #"#",(a3)+
  1698.     bne.w failBMON
  1699.     bsr.w atolong_BMON
  1700.     bra.w storelongBMON
  1701. atpccBMON=*-assubsBMON
  1702.     bsr.w assccodeBMON
  1703.     cmp.b #" ",(a3)+
  1704.     bne.w failBMON
  1705.     rts
  1706.  
  1707. apvalidBMON=*-assubsBMON
  1708.     bsr.w assan02BMON
  1709.     or.w #$2c00,d0
  1710.     bsr.b afstoreBMON
  1711.     bra.w asstoeaBMON
  1712. atppccBMON=*-assubsBMON
  1713.     bsr.w asspccodeBMON
  1714.     bra.b afst0BMON
  1715. atpfccBMON=*-assubsBMON
  1716.     bsr.w assfccodeBMON
  1717. afst0BMON:    cmp.b #" ",(a3)+
  1718.     bne.w failBMON
  1719. afstoreBMON:bra.w storeinstrBMON
  1720.  
  1721. afnopBMON=*-assubsBMON
  1722.     moveq #0,d0        ;4byte command
  1723.     bra.b afstoreBMON
  1724. apflushaBMON=*-assubsBMON
  1725.     move.w #$2400,d0
  1726.     bra.b afstoreBMON
  1727. apflushrBMON=*-assubsBMON
  1728.     move.w #$a000,d0
  1729.     bsr.b afstoreBMON
  1730.     bra.w asseaBMON
  1731. apflushsBMON=*-assubsBMON
  1732.     move.w #$3400,d3    
  1733.     bra.b apfl3BMON
  1734. apflushBMON=*-assubsBMON
  1735.     move.w #$3000,d3    
  1736. apfl3BMON:    move.b (a3)+,d2
  1737.     cmp.b #"f",(a3)
  1738.     bne.b apfl1BMON
  1739.     addq.w #1,a3
  1740.     cmp.b #"c",(a3)+
  1741.     bne.w failBMON
  1742.     moveq #%00000000,d1
  1743.     cmp.b #"s",d2
  1744.     beq.b apfl2BMON
  1745.     moveq #%00000001,d1
  1746.     cmp.b #"d",d2
  1747.     beq.b apfl2BMON
  1748.     bra.w failBMON
  1749. apfl1BMON:    moveq #%00010000,d1
  1750.     moveq #"#",d0
  1751.     sub.b d2,d0
  1752.     beq.b apfl0BMON
  1753.     cmp.b #"#"-"d",d0
  1754.     bne.w failBMON
  1755.     moveq #%00001000,d1
  1756. apfl0BMON:    bsr.w assrn02BMON
  1757.     or.w d0,d1
  1758. apfl2BMON:    cmp.b #",",(a3)+
  1759.     bne.w failBMON
  1760.     cmp.b #"#",(a3)+
  1761.     bne.w failBMON
  1762.     bsr.w assrn02BMON
  1763.     lsl.w #5,d0
  1764.     or.w d1,d0
  1765.     or.w d3,d0    ;$3000|$3400
  1766.     bra.b afstoreBMON
  1767. aploadBMON=*-assubsBMON
  1768.     move.w #$2010,d1
  1769. apte0BMON:    moveq #"w",d0
  1770.     sub.b (a3)+,d0
  1771.     beq.b aplo0BMON
  1772.     bset #9,d1
  1773.     subq.b #"w"-"r",d0
  1774.     bne.w failBMON
  1775. aplo0BMON:    bsr.w asstabBMON
  1776.     cmp.b #"#",(a3)+
  1777.     bne.w failBMON
  1778.     bsr.w assrn02BMON
  1779.     or.w d1,d0
  1780.     bsr.w afstoreBMON    
  1781.     bra.w asstoeaBMON
  1782. aptestBMON=*-assubsBMON
  1783.     move.w #$8110,d1
  1784.     bsr.b apte0BMON
  1785.     cmp.b #",",(a3)+
  1786.     bne.w failBMON
  1787.     cmp.b #"#",(a3)+
  1788.     bne.w failBMON
  1789.     bsr.w assrn02BMON
  1790.     ror.w #6,d0
  1791.     beq.w failBMON    ;level 0?
  1792.     move.w d0,d1
  1793.     cmp.b #",",(a3)+
  1794.     bne.w failBMON
  1795.     cmp.b #"a",(a3)+
  1796.     bne.w failBMON
  1797.     bsr.w assrn02BMON
  1798.     rol.w #5,d0
  1799.     or.w d1,d0
  1800.     or.w d0,op68000+2
  1801.     rts
  1802.     
  1803. adivsllBMON=*-assubsBMON
  1804.     move.w #$800,d0
  1805.     bra.b adivs0BMON
  1806. adivullBMON=*-assubsBMON
  1807.     moveq #0,d0
  1808. adivs0BMON:    bsr.w storeinstrBMON
  1809.     move.b #%10,imsizeBMON
  1810.     bsr.w asseaBMON
  1811.     cmp.b #",",(a3)+
  1812.     bne.w failBMON
  1813.     bsr.w assdn02BMON        ;d0.w
  1814.     move.w d0,d3
  1815.     cmp.b #":",(a3)+
  1816.     bne.w failBMON
  1817.     bsr.w assdn02BMON
  1818.     cmp.b d0,d3
  1819.     beq.w failBMON
  1820.     bra.b notwoBMON    
  1821. amulslBMON=*-assubsBMON
  1822.     move.w #$800,d0
  1823.     bra.b amuls0BMON
  1824. amululBMON=*-assubsBMON
  1825.     moveq #0,d0
  1826. amuls0BMON:    bsr.w storeinstrBMON
  1827.     move.b #%10,imsizeBMON
  1828.     bsr.w asseaBMON
  1829.     cmp.b #",",(a3)+
  1830.     bne.w failBMON
  1831.     bsr.w assdn02BMON        ;d0.w
  1832.     move.w d0,d3
  1833.     cmp.b #":",(a3)+
  1834.     bne.b notwoBMON
  1835.     bset #10,d3
  1836.     bsr.w assdn02BMON
  1837. notwoBMON:    ror.w #4,d0        ;mulx.l ea,dm:dm=dn
  1838.     or.w d0,d3
  1839.     or.w d3,op68000+2
  1840.     rts
  1841.  
  1842. aicmpmBMON=*-assubsBMON
  1843.     cmp.b #"(",(a3)+
  1844.     bne.w failBMON
  1845.     bsr.w assax02BMON
  1846.     lea cmpmtxtBMON(pc),a0
  1847.     bsr.w cmptxtBMON
  1848.     bsr.w assax9bBMON
  1849.     cmp.b #")",(a3)+
  1850.     bne.w failBMON
  1851.     cmp.b #"+",(a3)+
  1852.     bne.w failBMON
  1853.     rts
  1854.  
  1855. asize67adsbxBMON=*-assubsBMON        ;same!
  1856. axbcdBMON=*-assubsBMON
  1857. aasxbcdBMON:cmp.b #"-",(a3)+
  1858.     bne.b axbcd0BMON
  1859.     bset #3,op68000+1
  1860.     cmp.b #"(",(a3)+
  1861.     bne.b axbcd2BMON        ;failBMON
  1862.     bsr.w assax02BMON
  1863.     lea xbcdtxtBMON(pc),a0
  1864.     bsr.w cmptxtBMON
  1865.     bsr.w assax9bBMON
  1866.     cmp.b #")",(a3)+
  1867.     beq.b axbcd1BMON        ;no failBMON
  1868. axbcd2BMON:    sf d7
  1869. axbcd1BMON:    rts
  1870. axbcd0BMON:    subq.w #1,a3
  1871.     bsr.w assdx02BMON
  1872.     bra.w asstodx9bBMON
  1873.  
  1874. asize6movepBMON=*-assubsBMON
  1875.     cmp.b #"d",(a3)
  1876.     beq.b amovp0BMON
  1877.     bsr.w asseaBMON
  1878.     move.w op68000,d0
  1879.     bclr #5,op68000+1
  1880.     and.w #%111000,d0
  1881.     cmp.w #%101000,d0
  1882.     bne.w failBMON
  1883.     bra.w asstodx9bBMON
  1884. amovp0BMON:    bset #7,op68000+1
  1885.     bsr.w assdx9bBMON
  1886.     bsr.w asstoeaBMON
  1887.     move.w op68000,d0
  1888.     bclr #5,op68000+1
  1889.     and.w #%111000,d0
  1890.     cmp.w #%101000,d0
  1891.     bne.w failBMON
  1892.     rts
  1893. aimovemBMON=*-assubsBMON
  1894.     moveq #0,d0
  1895.     bsr storeinstrBMON
  1896.     cmp.b #"d",(a3)
  1897.     beq.b aimovm0BMON
  1898.     cmp.b #"a",(a3)
  1899.     beq.b aimovm0BMON
  1900.     bset #10-8,op68000
  1901.     bsr.w asseaBMON
  1902.     cmp.b #",",(a3)+
  1903.     bne.w failBMON
  1904.     bsr.b assrxBMON
  1905.     bra.b aimovm7BMON
  1906. aimovm0BMON:bsr.b assrxBMON
  1907.     bsr.w asstoeaBMON
  1908. aimovm7BMON:moveq #%111000,d0
  1909.     and.w op68000,d0
  1910.     cmp.w #%100000,d0    ;-(an)
  1911.     bne.b aimovm8BMON
  1912.     move.w op68000+2,d1    ;rl
  1913.     moveq #16-1,d0
  1914. aimovm9BMON:lsr.w #1,d1
  1915.     roxl.w #1,d2
  1916.     dbf d0,aimovm9BMON
  1917.     move.w d2,op68000+2
  1918. aimovm8BMON:rts
  1919. assrxBMON:    clr.w d0
  1920. aimovm2BMON:move.b 1(a3),d1
  1921.     sub.b #"0",d1
  1922.     bcs.w failBMON
  1923.     cmp.b #7,d1
  1924.     bhi.w failBMON
  1925.     cmp.b #"d",(a3)
  1926.     beq.b aimovm5BMON
  1927.     cmp.b #"a",(a3)
  1928.     bne.w failBMON
  1929.     addq.b #8,d1
  1930. aimovm5BMON:addq.w #2,a3
  1931.     bset d1,d0
  1932. aimovm4BMON:cmp.b #",",(a3)
  1933.     beq.b aimovm1BMON
  1934.     cmp.b #"/",(a3)+
  1935.     beq.b aimovm2BMON
  1936.     cmp.b #"-",-1(a3)
  1937.     bne.b aimovm1BMON
  1938.     move.b 1(a3),d2
  1939.     sub.b #"0",d2
  1940.     bcs.w failBMON
  1941.     cmp.b #7,d2
  1942.     bhi.w failBMON
  1943.     cmp.b #"d",(a3)
  1944.     beq.b aimovm6BMON
  1945.     cmp.b #"a",(a3)
  1946.     bne.w failBMON
  1947.     addq.b #8,d2
  1948. aimovm6BMON:addq.w #2,a3
  1949.     cmp.b d1,d2
  1950.     bls.w failBMON
  1951. aimovm3BMON:addq.b #1,d1
  1952.     bset d1,d0    
  1953.     cmp.b d1,d2
  1954.     bne.b aimovm3BMON
  1955.     bra.b aimovm4BMON
  1956. aimovm1BMON:move.w d0,op68000+2
  1957.     rts
  1958.  
  1959. adx9btodx02BMON=*-assubsBMON
  1960.     bsr.b assdx9bBMON
  1961.     bra.w asstodx02BMON
  1962. aax9btoax02BMON=*-assubsBMON
  1963.     bsr.b assax9bBMON
  1964.     bra.b asstoax02BMON
  1965. adx9btoax02BMON=*-assubsBMON
  1966.     bsr.b assdx9bBMON
  1967.     bra.b asstoax02BMON
  1968. aiunlkBMON=*-assubsBMON
  1969.     bra.b assax02BMON
  1970. alinklgBMON=*-assubsBMON
  1971.     bsr.b assax02BMON
  1972.     cmp.b #",",(a3)+
  1973.     bne.w failBMON
  1974.     bra.w atpc0BMON
  1975. ailinkBMON=*-assubsBMON
  1976.     bsr.b assax02BMON
  1977.     cmp.b #",",(a3)+
  1978.     bne.w failBMON
  1979.     bra.w aiwrdBMON
  1980.  
  1981. asstoax9bBMON:cmp.b #",",(a3)+
  1982.     bne.w failBMON
  1983. assax9bBMON:cmp.b #"a",(a3)+
  1984.     beq.b assxx9bBMON
  1985.     bra.w failBMON
  1986. asstodx9bBMON:cmp.b #",",(a3)+
  1987.     bne.w failBMON
  1988. assdx9bBMON:cmp.b #"d",(a3)+
  1989.     bne.w failBMON
  1990. assxx9bBMON:move.b (a3)+,d0
  1991.     sub.b #"0",d0
  1992.     bcs.w failBMON
  1993.     cmp.b #7,d0
  1994.     bhi.w failBMON    
  1995.     lsl.w #8,d0
  1996.     add.w d0,d0            ;asl.w #1,d0
  1997.     or.w d0,op68000
  1998.     rts
  1999. asstoax02BMON:cmp.b #",",(a3)+
  2000.     bne.w failBMON
  2001. assax02BMON:cmp.b #"a",(a3)+
  2002.     bne.w failBMON
  2003.     bra.b assxx02BMON
  2004. asstodx02BMON:cmp.b #",",(a3)+
  2005.     bne.w failBMON
  2006. assdx02BMON:cmp.b #"d",(a3)+
  2007.     bne.w failBMON
  2008. assxx02BMON:move.b (a3)+,d0
  2009.     sub.b #"0",d0
  2010.     bcs.w failBMON
  2011.     cmp.b #7,d0
  2012.     bhi.w failBMON
  2013.     or.b d0,op68000+1
  2014.     rts
  2015.  
  2016.     ifnd failBMON
  2017. failBMON:    sf d7
  2018.     rts
  2019.     endc
  2020.  
  2021. asstofpx79BMON:
  2022.     cmp.b #",",(a3)+
  2023.     bne.w failBMON
  2024. assfpx79BMON:cmp.b #"f",(a3)+
  2025.     bne.w failBMON
  2026.     cmp.b #"p",(a3)+
  2027.     bne.w failBMON
  2028.     move.b (a3)+,d0
  2029.     sub.b #"0",d0
  2030.     bcs.w failBMON
  2031.     cmp.b #7,d0
  2032.     bhi.w failBMON
  2033.     ext.w d0
  2034.     lsl.w #7,d0
  2035.     or.w d0,op68000+2    ;fpu instrBMON!
  2036.     rts
  2037. assccodeBMON:clr.w d0
  2038.     lea ccodetxtBMON(pc),a0
  2039. asscc0BMON:    move.b (a3),d1
  2040.     lsl.w #8,d1
  2041.     move.b 1(a3),d1
  2042.     tst.b 1(a0)        ;"t",0;"f",0
  2043.     bne.b asscc2BMON
  2044.     sf d1
  2045. asscc2BMON:    cmp.w (a0)+,d1
  2046.     beq.b asscc1BMON
  2047.     add.w #$0100,d0
  2048.     cmp.w #$1000,d0
  2049.     bne.b asscc0BMON
  2050.     bra.w failBMON
  2051. asscc1BMON:    addq.w #1,a3
  2052.     tst.b d1        ;"t",0;"f",0
  2053.     beq.b asscc3BMON
  2054.     addq.w #1,a3
  2055. asscc3BMON:    or.w d0,op68000
  2056.     rts
  2057.  
  2058. assfccodeBMON:
  2059.     moveq #124,d0        ;(31-1)*4
  2060. assfcc2BMON:lea fccodetxtBMON(pc),a0
  2061.     lea (a0,d0.w),a0
  2062.     move.l a3,-(a7)
  2063.     moveq #4-1,d1
  2064. assfcc0BMON:cmpm.b (a3)+,(a0)+
  2065.     bne.b assfcc1BMON
  2066.     tst.b (a0)
  2067.     dbeq d1,assfcc0BMON
  2068.     cmp.b #"e",(a3)        ;ngle preference
  2069.     beq.b assfcc1BMON
  2070.     addq.w #4,a7        ;remove a3
  2071.     lsr.w #2,d0
  2072.     rts        
  2073. assfcc1BMON:move.l (a7)+,a3
  2074.     subq.w #4,d0
  2075.     bpl.b assfcc2BMON
  2076.     bra.w failBMON
  2077.  
  2078. asspccodeBMON:
  2079.     move.b (a3)+,d1
  2080.     lsl.w #8,d1
  2081.     move.b (a3)+,d1
  2082.     lea pccodetxtBMON(pc),a0
  2083.     moveq #30,d0        ;(16-1)*2
  2084. asspcc0BMON:cmp.w (a0,d0.w),d1
  2085.     beq.b asspcc1BMON
  2086.     subq.w #2,d0
  2087.     bpl.b asspcc0BMON
  2088.     bra.w failBMON
  2089. asspcc1BMON:lsr.w #1,d0
  2090.     rts
  2091.  
  2092. cmpt0BMON:    cmp.b (a3)+,d0
  2093.     bne.w failBMON
  2094. cmptxtBMON:    move.b (a0)+,d0
  2095.     bclr #7,d0
  2096.     beq.b cmpt0BMON
  2097.     cmp.b (a3)+,d0
  2098.     bne.w failBMON
  2099.     rts
  2100.  
  2101. storeinstrBMON:addq.l #2,lginstrBMON
  2102. storewordBMON:
  2103.     lea op68000-2,a0
  2104.     move.w (a0),d1        ;oplen!
  2105.     addq.w #1,(a0)+
  2106.     add.w d1,d1
  2107.     move.w d0,2(a0,d1.w)
  2108.     rts
  2109. storelongBMON:
  2110.     lea op68000-2,a0
  2111.     move.w (a0),d1        ;oplen!
  2112.     addq.w #2,(a0)+
  2113.     add.w d1,d1
  2114.     move.l d0,2(a0,d1.w)
  2115.     rts
  2116.  
  2117. asstabBMON:    cmp.l lineendBMON,a3
  2118.     bhi.w failBMON
  2119.     cmp.b #" ",(a3)+
  2120.     beq.b asstabBMON
  2121. asstab0BMON:subq.w #1,a3
  2122.     rts    
  2123.  
  2124. asstoeaBMON:cmp.b #",",(a3)+
  2125.     bne.w failBMON
  2126. asseaBMON:    and.w #$ffc0,op68000
  2127.     cmp.b #"d",(a3)            ;dx
  2128.     beq.w assdx02BMON
  2129.     or.w #$0008,op68000
  2130.     cmp.b #"a",(a3)            ;ax
  2131.     beq.w assax02BMON
  2132.     and.w #$ffc0,op68000
  2133.     cmp.b #"(",(a3)            ;(ax)|(ax)+
  2134.     bne.b assea0BMON
  2135.     cmp.b #"a",1(a3)
  2136.     bne.b assea0BMON
  2137.     addq.w #1,a3
  2138.     or.w #$0010,op68000
  2139.     bsr.w assax02BMON
  2140.     cmp.b #")",(a3)+
  2141.     bne.w failBMON
  2142.     cmp.b #"+",(a3)
  2143.     bne.b assea1BMON
  2144.     addq.w #1,a3
  2145.     or.w #$0018,op68000
  2146. assea1BMON:    rts
  2147. assea0BMON:    cmp.b #"-",(a3)        ;-(ax)
  2148.     bne.b assea2BMON
  2149.     cmp.b #"(",1(a3)
  2150.     bne.w failBMON
  2151.     addq.w #2,a3
  2152.     or.w #$0020,op68000
  2153.     bsr.w assax02BMON
  2154.     cmp.b #")",(a3)+
  2155.     bne.w failBMON
  2156.     rts
  2157. assea2BMON:    cmp.b #"#",(a3)
  2158.     bne.w assea3BMON
  2159.     addq.w #1,a3
  2160.     or.w #$003c,op68000
  2161.     cmp.b #34,(a3)
  2162.     bne.b assea16BMON
  2163.     addq.w #1,a3
  2164.     moveq #0,d0
  2165.     moveq #5-1,d1
  2166. assea18BMON:cmp.b #34,(a3)+
  2167.     beq.b assea17BMON
  2168.     lsl.l #8,d0
  2169.     move.b -1(a3),d0
  2170.     dbf d1,assea18BMON
  2171.     bra.w failBMON
  2172. assea16BMON:cmp.b #"$",(a3)
  2173.     beq.b assea22BMON
  2174.     bsr.w atodlongBMON
  2175.     bra.b assea17BMON
  2176. assea22BMON:bsr.w atolong_BMON
  2177. assea17BMON:move.b imsizeBMON,d1
  2178.     beq.b assea13BMON
  2179.  
  2180.     cmp.b #%01,d1
  2181.     beq.b assea14BMON
  2182.     cmp.b #%10,d1
  2183.     bne.w failBMON
  2184.     swap d0
  2185.     bsr.b assea15BMON
  2186.     swap d0
  2187.     bra.b assea15BMON
  2188. assea13BMON:cmp.l #$ff,d0
  2189.     bhi.w failBMON
  2190. assea14BMON:cmp.l #$ffff,d0
  2191.     bhi.w failBMON
  2192. assea15BMON:bra.w storewordBMON    
  2193.  
  2194. assea3BMON:    cmp.b #"(",(a3)+    ;(x.l),(x.w),(d,ax,rx.x)
  2195.     bne.w failBMON
  2196.     sf d2
  2197.     cmp.b #"-",(a3)        ;sign?
  2198.     bne.b assea19BMON
  2199.     addq.w #1,a3
  2200.     st d2
  2201. assea19BMON:move.w d2,-(a7)
  2202.     cmp.b #"$",(a3)
  2203.     beq.b assea24BMON
  2204.     bsr.w atodlongBMON
  2205.     bra.b assea23BMON
  2206. assea24BMON:bsr.w atolong_BMON
  2207. assea23BMON:move.w (a7)+,d2
  2208.     cmp.b #",",(a3)        ;d(    !(d,    ?
  2209.     bne.w assea4BMON
  2210.     tst.b d2
  2211.     beq.b assea20BMON
  2212.     neg.l d0
  2213. assea20BMON:addq.w #1,a3
  2214.     cmp.b #"a",(a3)        ;d(ax    !(d,ax
  2215.     bne.w assea5BMON
  2216.     move.l d0,-(a7)
  2217.     bsr.w assax02BMON
  2218.     move.l (a7)+,d0
  2219.     move.l d0,d1
  2220.     bpl.b assea21BMON
  2221.     neg.l d1
  2222. assea21BMON:cmp.b #")",(a3)+    ;d(ax)    !(d,ax)
  2223.     bne.b assea6BMON
  2224.     or.w #$0028,op68000
  2225.     cmp.l #$ffff,d1        ;abs(d0)
  2226.     bhi.w failBMON
  2227.     bra.w storewordBMON
  2228. assea6BMON:    cmp.b #",",-1(a3)    ;    !(d,ax,rx.x)
  2229.     bne.w failBMON
  2230.     or.w #$0030,op68000
  2231.     cmp.l #$ff,d1        ;abs(d0)
  2232.     bhi.w failBMON
  2233. assea9BMON:    and.w #$ff,d0
  2234.     cmp.b #"d",(a3)+
  2235.     beq.b assea7BMON
  2236.     cmp.b #"a",-1(a3)
  2237.     bne.w failBMON
  2238.     bset #15,d0
  2239. assea7BMON:    move.b (a3)+,d1
  2240.     sub.b #"0",d1
  2241.     bcs.w failBMON        
  2242.     cmp.b #7,d1
  2243.     bhi.w failBMON
  2244.     ext.w d1
  2245.     ror.w #4,d1
  2246.     or.w d1,d0
  2247.     cmp.b #".",(a3)+
  2248.     bne.w failBMON
  2249.     cmp.b #"w",(a3)+
  2250.     beq.b assea8BMON
  2251.     cmp.b #"l",-1(a3)
  2252.     bne.w failBMON
  2253.     bset #11,d0
  2254. assea8BMON:    cmp.b #"*",(a3)
  2255.     bne.b assea8bBMON
  2256.     addq.w #1,a3
  2257.     moveq #-"1",d1
  2258.     add.b (a3)+,d1
  2259.     beq.b assea8bBMON
  2260.     or.w #%01000000000,d0
  2261.     subq.b #1,d1
  2262.     beq.b assea8bBMON
  2263.     eor.w #%11000000000,d0
  2264.     subq.b #2,d1
  2265.     beq.b assea8bBMON
  2266.     eor.w #%01000000000,d0
  2267.     subq.b #4,d1
  2268.     bne.w failBMON        
  2269. assea8bBMON:cmp.b #")",(a3)+    ;d(ax,rx.x)    !(d,ax,rx.x)
  2270.     bne.w failBMON
  2271.     bra.w storewordBMON
  2272. assea5BMON:    cmp.b #"p",(a3)+
  2273.     bne.w failBMON
  2274.     cmp.b #"c",(a3)+
  2275.     bne.w failBMON
  2276.     cmp.b #")",(a3)+        ;d(pc)    !(d,pc)
  2277.     bne.b assea10BMON
  2278.     or.w #$003a,op68000
  2279.     subq.l #2,d0            ;fixed instrBMON len
  2280.     sub.l lginstrBMON,d0        ;extension (mulx.l,cas2...)
  2281.     sub.l paraBMON,d0
  2282.     bsr.w storewordBMON
  2283.     move.l d0,d1
  2284.     ext.l d1
  2285.     cmp.l d0,d1
  2286.     bne.w failBMON
  2287.     rts
  2288. assea10BMON:or.w #$003b,op68000
  2289.     subq.l #2,d0            ;fixed instrBMON len
  2290.     sub.l lginstrBMON,d0        ;extension (mulx.l,cas2...)
  2291.     sub.l paraBMON,d0
  2292.     move.b d0,d1
  2293.     ext.w d1
  2294.     ext.l d1
  2295.     cmp.l d1,d0
  2296.     bne.b assfailBMON
  2297.     cmp.b #",",-1(a3)
  2298.     beq.w assea9BMON            ;d(pc,rx.x)    !(d,pc,rx.x)
  2299. assfailBMON:sf d7
  2300.     rts
  2301. assea4BMON:    cmp.b #")",(a3)+
  2302.     bne.w failBMON
  2303.     cmp.b #".",(a3)
  2304.     beq.b assea11BMON
  2305.     or.w #$0039,op68000
  2306.     swap d0
  2307.     bsr.w storewordBMON
  2308.     swap d0
  2309.     bra.w storewordBMON
  2310. assea11BMON:addq.w #1,a3
  2311.     cmp.b #"w",(a3)+    
  2312.     bne.w failBMON
  2313.     or.w #$0038,op68000
  2314.     cmp.l #$ffff,d0
  2315.     bhi.w failBMON
  2316.     bra.w storewordBMON
  2317.  
  2318. ;---------------------------------------------------------------
  2319.     ifnd ccodetxtBMON
  2320.  
  2321. ccodetxtBMON:    dc.b "t",0,"f",0,"hilscccsneeqvcvsplmigeltgtle"    ;even!
  2322. pccodetxtBMON:    dc.b "bsbclslcssscasacwswcisicgsgccscc"    ;even!
  2323. fccodetxtBMON:    dc.l "f"<<24    ;fpu condition codes
  2324.         dc.l "eq"<<16
  2325.         dc.l "ogt"<<8
  2326.         dc.l "oge"<<8
  2327.         dc.l "olt"<<8
  2328.         dc.l "ole"<<8
  2329.         dc.l "ogl"<<8
  2330.         dc.l "or"<<16
  2331.         dc.l "un"<<16
  2332.         dc.l "ueq"<<8
  2333.         dc.l "ugt"<<8
  2334.         dc.l "uge"<<8
  2335.         dc.l "ult"<<8
  2336.         dc.l "ule"<<8
  2337.         dc.l "ne"<<16
  2338.         dc.l "t"<<24
  2339.         dc.l "sf"<<16
  2340.         dc.l "seq"<<8
  2341.         dc.l "gt"<<16
  2342.         dc.l "ge"<<16
  2343.         dc.l "lt"<<16
  2344.         dc.l "le"<<16
  2345.         dc.l "gl"<<16
  2346.         dc.l "gle"<<8
  2347.         dc.l "ngle"
  2348.         dc.l "ngl"<<8
  2349.         dc.l "nle"<<8
  2350.         dc.l "nlt"<<8
  2351.         dc.l "nge"<<8
  2352.         dc.l "ngt"<<8
  2353.         dc.l "sne"<<8
  2354.         dc.l "st"<<16
  2355.  
  2356. fmconstBMON:dc.b "1","E"+$80,"P","i"+$80,"Log10(2",")"+$80,"e"+$80,"Log2(e",")"+$80
  2357.     dc.b "Log10(e",")"+$80,"0.","0"+$80,"ln(2",")"+$80,"ln(10",")"+$80
  2358.     dc.b "1"+$80,"1","0"+$80,"10","0"+$80
  2359.  
  2360. usptxtBMON:        dc.b "us","p"+$80
  2361. toccrtxtBMON:    dc.b ","
  2362. ccrtxtBMON:        dc.b "cc","r"+$80
  2363. tosrtxtBMON:    dc.b ","
  2364. srtxtBMON:        dc.b "s","r"+$80
  2365. xbcdtxtBMON:    dc.b "),-","("+$80
  2366. cmpmtxtBMON:    dc.b ")+,","("+$80
  2367.         even
  2368. cregsBMON:    dc.b $08,$08,"pcr",0    ;68060
  2369.         dc.b $08,$07,"srp",0    ;68040
  2370.         dc.b $08,$06,"urp",0    ;68040
  2371.         dc.b $08,$05,"mmur"    ;68040
  2372.         dc.b $08,$04,"isp",0
  2373.         dc.b $08,$03,"msp",0
  2374.         dc.b $08,$02,"caar"    ;68020/30 only
  2375.         dc.b $08,$01,"vbr",0
  2376.         dc.b $08,$00,"usp",0
  2377.         dc.b $00,$08,"busr"    ;68060
  2378.         dc.b $00,$07,"dtt1"    ;68040
  2379.         dc.b $00,$06,"dtt0"    ;68040
  2380.         dc.b $00,$05,"itt1"    ;68040
  2381.         dc.b $00,$04,"itt0"    ;68040
  2382.         dc.b $00,$03,"tc",0,0    ;68040
  2383.         dc.b $00,$02,"cacr"
  2384.         dc.b $00,$01,"dfc",0
  2385.         dc.b $00,$00,"sfc",0
  2386.         dc.b $80
  2387. pregsBMON:    dc.b $08,"tt","0"+$80
  2388.         dc.b $0c,"tt","1"+$80
  2389.         dc.b $40,"t","c"+$80
  2390.         dc.b $44,"dr","p"+$80    ;68851 only
  2391.         dc.b $48,"sr","p"+$80
  2392.         dc.b $4c,"cr","p"+$80
  2393.         dc.b $50,"ca","l"+$80    ;68851 only
  2394.         dc.b $58,"sc","c"+$80    ;68851 only
  2395.         dc.b $5c,"a","c"+$80    ;68851 only
  2396.         dc.b $60,"mmus","r"+$80    ;68030 mmusr = 68851 psr
  2397.         dc.b $60,"ps","r"+$80    ;68030 mmusr = 68851 psr
  2398.         dc.b $64,"pcs","r"+$80    ;68851 only
  2399.         dc.b $ac,"va","l"+$80,0    ;68851 only
  2400.  
  2401. sizemovBMON:    dc.b "*blw",%11,%00,%10,%01
  2402. dcbtxtBMON:    dc.b "dc.b "!$80
  2403.  
  2404. idctxBMON:    dc.l "ndib"    ;nc,dc,ic,bc
  2405.  
  2406.     endc
  2407.  
  2408.  
  2409. paraBMON    dc.l 0            ;address
  2410.  
  2411. lineendBMON    dc.l 0
  2412.  
  2413. lginstrBMON    dc.l 0
  2414. oplen        dc.w 0            ;nb word for instrBMON.
  2415. op68000        dc.w 0,0,0,0,0,0,0    ;assembled instrBMON. here !!
  2416.         ifnd imsizeBMON
  2417. imsizeBMON    dc.b 0
  2418.         even
  2419.         endc
  2420.  
  2421.